Создание контекстного меню для Win32 API - PullRequest
7 голосов
/ 22 февраля 2010

Я пытаюсь создать контекстное меню для приложения 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);
}

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

альтернативный текст http://img191.imageshack.us/img191/866/70219076.png

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

Ответы [ 3 ]

6 голосов
/ 23 февраля 2010

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

изменить это

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

к этому

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

или это

L"Exit"
L"Play"
1 голос
/ 22 февраля 2010

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

0 голосов
/ 22 февраля 2010

подписка сработала у меня

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);
          }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...