资源描述:
《Vc++-6.0-菜单的基本操作.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Vc++6.0菜单的基本操作 凡是从CWnd派生的类,它们既可以接收标准消息,也可以接收命令消息和通告消息。而对于那些从CCmdTarget派生的类,则只能接收命令消息和通告消息,不能接收标准消息。 响应菜单项命令的顺序依次是:视类,文档类,框架类,最后才是应用程序类。 基本菜单操作: 1.标记菜单: 可以通过CWnd的成员函数:GetMenu来获得指向菜单栏的指针,在框架类的OnCreate函数中,加入以下代码 GetMenu()->GetSubMenu(0)->
2、CheckMenuItem(0,MF_BYPOSITION
3、MF_CHECKED); 2.默认菜单项:分隔栏在子菜单中占据索引位置,一个子菜单只有一个默认菜单项 GetMenu()->GetSubMenu(0)->SetDefaultItem(1,TRUE); 3.图形标记菜单: m_bitmap.LoadBitmap(IDB_BITMAP1); GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,&m
4、_bitmap, &m_bitmap); 图形标记菜单上显示的位图的尺寸有固定的标准,我们创建的位图太大了,只显示了当前位图左上角的一小部分内容,通过GetSystemMetrics函数可以得到图形标记菜单上显示的位图的尺寸。当该参数的值为SM_XMENUCHECKorSM_CYMENUCHECK时,这个函数将获取标记菜单项上标记图形的默认尺寸。 CString类提供了一个名为Format的函数,这个函数可以按照一定的格式把内容格式,然后将结果保存到CString类型的字符串对象中。
5、 4.禁用菜单项 一旦在CMainFrame类的构造函数中把成员变量m_bAutoMenuEnable设置为FALSE后,就不需要对ON_UPDATE_COMMAND_UI或ON_COMMAND消息进行响应处理了,CMenu类的EnableMenuItem函数将能够正常工作。 GetMenu()->GetSubMenu()->EnableMenuItem(1,MF_BYPOSITION
6、MF_DISABLED); 5.移除和装载菜单 BOOLSetMenu(CMenu*p
7、Menu);这个函数有一个CMenu类型指针的参数,它指向一个新菜单对象。SetMenu(NULL)移除现有菜单; 6.MFC菜单命令更新机制 我们只需要捕获UPDATE_COMMAND_UI消息,在该消息的响应函数中调用CCmdUI对象的相应函数,例如Enable,SetCheck或Setetxt 7.快捷菜单 CMenumenu;//最好动态分配内存, menu.LoadMenu(IDR_MENU1); CMenu*pPopup=menu.GetSubMenu(
8、0); pPopup->TrasckPopupMenu(TPM_LEFTALIGN,TPM_RIGHTBUTTON,point.x,point.y,this); this指的是View类接收消息,框架类不接受消息,GetParent()则是指框架类接收消息,则子窗口优先响应消息,如果子窗口不能处理,再由父窗口处理。 动态菜单操作: 1.添加菜单项目: CMenumenu; menu.CreateMenu(); GetMenu()->AppendMenu(MF_
9、POPUP,(UINT)menu.m_hMenu,”Test”); 2.插入菜单项目 GetMenu()->InsertMenu(2,MF_POPUP
10、MF_BYPOSITION,(UINT)menu.m_hMenu, ”Test”); menu.AppendMenu(MF_STRING,111,”HELLO”); GetMenu()->GetSubMenu(0)->InsertMenu(ID_FILE_OPEN,MF_BYCOMMAND
11、MF_STRING,115,”V
12、C编程”); 3.删除菜单 BOOLDeleteMenu(UINTnPosition,UINTnFlag);利用这个函数,可以删除一个菜单项目,包括子菜单,以及子菜单下的菜单项,主要取决于调用这个函数的对象。 GetMenu()->DeleteMenu(1,MF_BYPOSITION); GetMenu()->GetSubMenu(0)->DeleteMenu(2,MF_BYPOSITION); 4.动态添加的菜单项的命令响