为Win32 API创建上下文菜单

11

我正在尝试使用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

我希望在菜单中显示退出播放文本


2
我猜图片现在完全丢失了。很高兴SO现在允许粘贴图片。 - Adrian
3个回答

7
你不能通过强制转换将字符串字面量转换为宽字符,你必须声明它为宽字符字符串。强制转换只是消除编译器警告,它不会改变字符串的内容。
请修改此处。
(LPCWSTR)"Exit"
(LPCWSTR)"Play"

转换为

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

或者这个

L"Exit"
L"Play"

2

以下方法适用于我

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

1
你在API函数定义中指定了编码吗?最近我遇到了这个问题,移除了规范就解决了问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接