Контекстное меню Creating для 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);
}

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

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

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

8
задан Jon Seigel 6 March 2010 в 00:13
поделиться

3 ответа

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

измените это

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

на это

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

или это

L"Exit"
L"Play"
6
ответ дан 5 December 2019 в 21:18
поделиться

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

1
ответ дан 5 December 2019 в 21:18
поделиться

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

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);
          }
0
ответ дан 5 December 2019 в 21:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: