【发布时间】:2012-03-11 18:14:45
【问题描述】:
我正在尝试使用为对话框创建的上下文菜单,但是当我单击菜单项时应该发送的 WM_COMMAND 消息没有到达对话框过程。
我在消息循环中放置了一条 if 语句来检查 WM_COMMAND,它正在注册但未发送到我的对话过程。
是的,我正在使用if( !IsDialogMessage( hwndListDialog, &msg ) ) 呼叫TranslateMessage 和DispatchMessage。
这就是我初始化上下文菜单的方式:
listitemmenu = CreatePopupMenu();
listmenuitem1.cbSize = sizeof( menuitem1 );
listmenuitem1.fMask = MIIM_TYPE;
listmenuitem1.fType = MFT_STRING;
listmenuitem1.hSubMenu = NULL;
listmenuitem1.dwTypeData = "Copy Imgur Link";
InsertMenuItem( listitemmenu, 0, true, &listmenuitem1 ); //insert menu item
listmenuitem2.cbSize = sizeof( menuitem1 );
listmenuitem2.fMask = MIIM_TYPE;
listmenuitem2.fType = MFT_STRING;
listmenuitem2.hSubMenu = NULL;
listmenuitem2.dwTypeData = "Copy Imgur Delete Link";
InsertMenuItem( listitemmenu, 1, true, &listmenuitem2 ); //insert menu item
listmenuitem3.cbSize = sizeof( menuitem1 );
listmenuitem3.fMask = MIIM_TYPE;
listmenuitem3.fType = MFT_STRING;
listmenuitem3.hSubMenu = NULL;
listmenuitem3.dwTypeData = "Rename";
InsertMenuItem( listitemmenu, 2, true, &listmenuitem3 ); //insert menu item
listmenuitem4.cbSize = sizeof( menuitem1 );
listmenuitem4.fMask = MIIM_TYPE;
listmenuitem4.fType = MFT_STRING;
listmenuitem4.hSubMenu = NULL;
listmenuitem4.dwTypeData = "Remove from list";
InsertMenuItem( listitemmenu, 3, true, &listmenuitem4 ); //insert menu item
这就是我跟踪菜单的方式:
TrackPopupMenuEx( listitemmenu, TPM_LEFTBUTTON | TPM_NOANIMATION | TPM_HORIZONTAL | TPM_VERTICAL, cpos.x, cpos.y, ListControl, NULL );
这是我尝试用来与我的菜单交互的开关盒:
case WM_COMMAND:
switch( LOWORD(lParam) )
{
case 0:
printf("copy link");
break;
case 1:
printf("copy deletion link");
break;
case 2:
printf("Rename");
break;
case 3:
printf("Remove");
break;
}
break;
【问题讨论】:
-
WM_COMMAND 消息被发送到 ListControl。这是故意的吗?
标签: c++ winapi user-interface dialog contextmenu