我用CMenu创建一个弹出菜单
注意不是使用资源形式CMenu popMenu;
popMenu.CreatePopupMenu();
popMenu.AppendMenu(0,1,"hello");
popMenu.AppendMenu(0,2,"bye");popMenu.TrackPopupMenu(nFlags,x,y,pWnd,0);popMenu.DestroyMenu();
注意不是使用资源形式CMenu popMenu;
popMenu.CreatePopupMenu();
popMenu.AppendMenu(0,1,"hello");
popMenu.AppendMenu(0,2,"bye");popMenu.TrackPopupMenu(nFlags,x,y,pWnd,0);popMenu.DestroyMenu();
TPM_RETURNCMD
就可以了
{
// TODO: Add your message handler code here
CMenu popMenu;
popMenu.CreatePopupMenu();
popMenu.AppendMenu(0,1,"hello");
popMenu.AppendMenu(0,2,"bye");
UINT index = ::TrackPopupMenu(popMenu.m_hMenu,TPM_RETURNCMD,point.x,point.y,0,
pWnd->GetSafeHwnd(),0);
CString strIndex;
strIndex.Format("%d",index);
AfxMessageBox(strIndex);
popMenu.DestroyMenu();
}没问题
index就是菜单项的标识
还是其他,谢谢。
pWnd->GetSafeHwnd(),0);
是发往pWnd->GetSafeHwnd()窗口
随你变了 视你菜单完成的功能来决定
跟调用CMenu中的TrackPopupMenu不一样啊我用API调用后可以返回,但是不能自己绘制特殊效果了
#define IDM_MENU1 10001
#define IDM_MENU2 10002
#define IDM_MENU3 10003
#define IDM_MENU4 10004右键弹出菜单如下
CMenu menuPopUp, menuChild;
if (menuPopUp.CreatePopupMenu())
{
menuPopup.AppendMenu(MF_STRING, IDM_MENU1, _T("Menu 1"));
menuPopup.AppendMenu(MF_STRING, IDM_MENU2, _T("Menu 2")); if (menuChild.CreatePopupMenu())
{
menuChild.AppendMenu(MF_STRING, IDM_MENU3, _T("Menu 3"));
menuChild.AppendMenu(MF_STRING, IDM_MENU4, _T("Menu 4")); menuPopup.AppendMenu(MF_POPUP, (UNIT) menuChild.GetSafeHwnd(), _T("Sub Menu"));
} POINT pt;
GetCursorPos(&pt);
menuPopUp.TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, pt.x, pt.y, this);
menuPopUp.DestroyMenu();
}响应菜单可以使用ON_COMMAND宏或者ON_COMMAND_RANGE(菜单ID值连续的菜单)宏
在头文件中加入如下定义
afx_msg void OnMenu1();
afx_msg void OnMenu(UNIT nID);在
END_MESSAGE_MAP()
这一句前加入
ON_COMMAND(IDM_MENU1, OnMenu1)
ON_COMMAND_RANGE(IDM_MENU2, IDM_MENU4, OnMenu)然后实现OnMenu1函数和OnMenu函数即可,其中OnMenu函数中的唯一一个参数表示你所点击的菜单的ID值
这句应该是
afx_msg void OnMenu(UINT nID);
popMenu.CreatePopupMenu();
popMenu.AppendMenu(0,1,"hello");
popMenu.AppendMenu(0,2,"bye");popMenu.TrackPopupMenu(nFlags,x,y,pWnd,0);popMenu.DestroyMenu();中的1和2必须是你在菜单中定义的ID,比如IDC_YOURMENUID1,然后生成代码。