2010-02-22 20 views
6

Estoy tratando de crear el menú contextual de la aplicación Win32 usandoLa creación de menú contextual para Win32 API

case WM_RBUTTONDOWN: 
{ 
    HMENU hPopupMenu = CreatePopupMenu(); 
    InsertMenu(hPopupMenu, 0, MF_BYPOSITION | MF_STRING, ID_CLOSE, (LPCWSTR)"Exit"); 
    InsertMenu(hPopupMenu, 0, MF_BYPOSITION | MF_STRING, ID_EXIT, (LPCWSTR)"Play"); 
    SetForegroundWindow(hWnd); 
    TrackPopupMenu(hPopupMenu, TPM_BOTTOMALIGN | TPM_LEFTALIGN, 0, 0, 0, hWnd, NULL); 
}

Pero siempre consigo menú contextual que se muestra a continuación

alt text http://img191.imageshack.us/img191/866/70219076.png

Quiero texto salida y jugar para mostrarse en el menú

Respuesta

5

No es posible convertir una cadena literal de ancho por fundición, hay que declararlo como una cadena de carbón de ancho. El lanzamiento derrota la advertencia del compilador, no cambia el contenido de la cadena.

cambio de este

(LPCWSTR)"Exit" 
(LPCWSTR)"Play" 

a este

_T("Exit") 
_T("Play") 

o esta

L"Exit" 
L"Play" 
1

Son especificando la codificación en la definición de la función API? Me encontré con ese problema recientemente y eliminar la especificación solucionó el problema.

0

A continuación trabajó para mí

case WM_RBUTTONDOWN: 
      { 
      HMENU hPopupMenu = CreatePopupMenu(); 
      InsertMenu(hPopupMenu, 0, MF_BYPOSITION | MF_STRING, ID_CLOSE, L"Exit"); 
      InsertMenu(hPopupMenu, 0, MF_BYPOSITION | MF_STRING, ID_EXIT, L"Play"); 
      SetForegroundWindow(hWnd); 
      TrackPopupMenu(hPopupMenu, TPM_BOTTOMALIGN | TPM_LEFTALIGN, 0, 0, 0, hWnd, NULL); 
      } 
Cuestiones relacionadas