总结:
标准消息:除了WM_COMMAND之外,所有以WM_开头的消息。从CWnd类派生出来的类都可以接收这种消息。
GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION | MF_CHECKED);
//使用位置索引(选中想要的子菜单项,横线也占用索引号),在子菜单项中增加标记菜单
GetMenu()->GetSubMenu(0)->SetDefaultItem(1,TRUE);
//设置缺省菜单项(这个函数TRUE表示用位置索引,FALSE表示用ID号)
/*CString str;
str.Format("x=%d,y=%d",GetSystemMetrics(SM_CXMENUCHECK),
GetSystemMetrics(SM_CYMENUCHECK));
MessageBox(str);
//这些是用来检测应用程序子菜单项前面的小图标,系统配置的是多少大小*/
m_bitmap.LoadBitmap(IDB_BITMAP1);
GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_bitmap,&m_bitmap);
//设置子菜单项前面的小图标
//************************
GetMenu()->GetSubMenu(0)->EnableMenuItem(1,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);
//是子菜单项变灰并且不可点击(未激活状态),要实现这个需要在CMainFrame类中加上m_bAutoMenuEnable=FALSE;这一句。
//************************
CCmdUI类The CCmdUI class is used only within an ON_UPDATE_COMMAND_UI handler in a CCmdTarget-derived class.(这里说明它是用来接收CN_UPDATE_COMMAND_UI消息的类)
CMenu menu; //定义一个菜单变量
menu.LoadMenu(IDR_MENU1); //加载设计好的菜单
CMenu* pPopup=menu.GetSubMenu(0); //定义菜单指针获取第一个子菜单栏
ClientToScreen(&point); //转移坐标系到应用程序窗口中来
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, GetParent());
//显示右键弹出菜单,GetParent()写到弹出菜单是CMainFrame拥有,当CTestView类中没有弹出菜单子项点击的响应函数的时候会去CMainFrame类中查找相应的响应函数;如果这里写的是this,那么不会去检查CMainFrame类中是否有弹出菜单子项的响应函数(可以在两个类中都加上响应函数试一下)
GetMenu()->AppendMenu(MF_POPUP,(UINT)menu.m_hMenu,"WinSun");
//将弹出 菜单添加到上图中的帮助后面
GetMenu()->InsertMenu(2,MF_BYPOSITION|MF_POPUP,(UINT)menu.m_hMenu,"WinSun");
//将弹出菜单插入到到第二个菜单项(即上图中的编辑)的后面,这里是通过索引编号进行定位
menu.Detach();
//这里就是防止OnCreate函数执行完后menu对象析构而造成的错误
GetMenu()->DeleteMenu(1,MF_BYPOSITION);
//删除菜单栏中的第二个菜单项(即 编辑)