Создание контекстного меню для win32 API

Я пытаюсь создать контекстное меню для приложения win32 с помощью

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

но я всегда получаю контекстное меню, как показано ниже

alt текст http://img191.imageshack.us/img191/866/70219076.png

Я хочу, чтобы текст выход и играть для отображения в меню

3 ответов


вы не можете преобразовать строковый литерал в ширину на кастинг, вы должны объявить его как строку типа char. Приведение просто побеждает предупреждение компилятора, оно не изменяет содержимое строки.

изменить это

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

этой

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

или это

L"Exit"
L"Play"

вы указываете кодировку в определении функции API? Недавно я столкнулся с этой проблемой, и удаление спецификации исправило проблему.


следующие работал для меня

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