2010-02-22 15 views
6

Ich versuche Kontextmenü für Win32-Anwendung unter Verwendung vonErstellen von Kontextmenü für 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); 
}

zu erstellen Aber ich Kontextmenü immer wie unten

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

Ich mag Text Ausgang gezeigt bekommen und Spiel in dem

Menü angezeigt

Antwort

5

Sie können keine Stringliteral zu breit konvertieren durch Gießen, haben Sie es als eine große char string zu erklären. Das Casting beendet nur die Compiler-Warnung, es ändert den Inhalt der Zeichenfolge nicht.

Änderung dieser

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

dieser

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

oder diese

L"Exit" 
L"Play" 
1

Sind Sie geben die Codierung in der API-Funktionsdefinition an? Ich bin kürzlich auf dieses Problem gestoßen und das Entfernen der Spezifikation hat das Problem behoben.

0

für mich

arbeitete Folge
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); 
      }