2010-02-22 20 views
6

Sto cercando di creare menu di scelta rapida per l'applicazione win32 utilizzandoCreazione di menu di scelta rapida per 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); 
}

ma ottengo sempre menu contestuale come mostrato di seguito

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

voglio testo uscita e riprodurre da visualizzare nel menu

risposta

5

Non è possibile convertire una stringa letterale di larghezza per fusione, si deve dichiarare come una stringa char larga. Il cast sconfigge solo l'avviso del compilatore, non cambia il contenuto della stringa.

cambiamento questo

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

a questo

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

o questo

L"Exit" 
L"Play" 
1

Are specificando la codifica nella definizione della funzione API? Mi sono imbattuto recentemente in questo problema e la rimozione delle specifiche ha risolto il problema.

0

In seguito ha lavorato per me

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); 
      } 
Problemi correlati