本文共 1801 字,大约阅读时间需要 6 分钟。
0.为菜单项手动添加命令消息响应函数(共有3处) afx_msg void OnTitle();//在类声明中添加命令消息响应函数的声明 ON_COMMAND(ID_MENU_TILE,OnTitle);//BEGIN_MESSAGE_MAP后 void CXXXDlg::OnTitle(){//...函数主体} 1.添加已有的菜单资源 CMenu menu; menu.LoadMenu(IDR_MENU1);//IDR_MENU1为已有的菜单资源ID CMenu* pPopup = menu.GetSubMenu(1);//选择菜单资源中的子菜单项 ClientToScreen(&point);//将客户区坐标转换为盘屏幕坐标 //::GetCursorPos(&point); 取得当前的屏幕坐标 pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x,point.y,this);//显示右键菜单 CDialogEx::OnRButtonUp(nFlags, point); 2.弹出式菜单2 #define ID_CONNNECT (WM_USER+5) #define ID_ADD_DEVICE (WM_USER+6) CMenu Menu; Menu.CreatePopupMenu(); Menu.AppendMenu(MF_STRING , ID_CONNNECT, _T("china")); Menu.AppendMenu(MF_STRING , ID_ADD_DEVICE,_T("japan")); CPoint pt; ::GetCursorPos(&pt);Menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x, pt.y, this);
//某些情况,This 替换为AfxGetMainWnd(),当如果主窗口 针对这些ID号具有处理的话,会比较方便。
3.弹出式菜单3 CMenu Menu;Menu.CreatePopupMenu();
CMenu MyMenu0,MyMenu1; Menu.AppendMenu(MF_STRING , ID_WNDINDEX, strText); Menu.AppendMenu(MF_SEPARATOR , 0,"");//分隔符号 Menu.AppendMenu(MF_STRING , ID_DISCONNECT, _T("Test")); MyMenu0.CreateMenu(); MyMenu0.AppendMenu(MF_STRING , ID_DEVICE_ADDPOINT, _T("Test1"));//代码1 Menu.AppendMenu(MF_POPUP,(UINT)MyMenu0.m_hMenu, _T("Test2"));//代码2:代码1和代码2可上下颠倒 MyMenu1.CreateMenu(); MyMenu1.AppendMenu(MF_STRING , ID_DEVICE_CLEANCUSTOM, _T("Test3")); Menu.AppendMenu(MF_POPUP,(UINT)MyMenu1.m_hMenu, _T("Clean"));//弹出式菜单中添加弹出式菜单 Menu.AppendMenu(MF_STRING , ID_DEVICE_COMSETTING, _T("Test4")); Menu.AppendMenu(MF_STRING , ID_DEVICE_IRPARAMSETTING, _T("Test5")); CPoint pt; ::GetCursorPos(&pt); Menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x, pt.y, this); MyMenu0.Detach();//Menu管理了MyMenu0和MyMenu1的各自的句柄m_hMenu,故而需要分离以避免析构时出现异常,对同一个资源进行多次释放 MyMenu1.Detach();
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
转载地址:http://slnws.baihongyu.com/