Я пытаюсь создать контекстное меню для 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
Я хочу текстовый выход и играю, чтобы быть отображенным в меню
Вы не можете преобразовать строковый литерал в широкий путем преобразования типов, вы должны объявить его как широкую строку символов. Приведение просто отменяет предупреждение компилятора, оно не меняет содержимое строки.
измените это
(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);
}