现在的位置: 首页 > 综合 > 正文

MFC学习日记八:Mfc设置菜单项及消息分类(总结)

2018年02月03日 ⁄ 综合 ⁄ 共 1616字 ⁄ 字号 评论关闭

总结:

标准消息:除了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);

//删除菜单栏中的第二个菜单项(即 编辑)

抱歉!评论已关闭.