VC+控件使用——菜单_第1页
VC+控件使用——菜单_第2页
VC+控件使用——菜单_第3页
VC+控件使用——菜单_第4页
VC+控件使用——菜单_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、VC+简单应用指南四菜单一、菜单资源设计1.打开工作区窗口,在Resource View选项卡中,右击,选择插入2.打开插入资源对话框,选择Menu节点,点击新建3.打开菜单资源设计窗口,再按Enter键,显示菜单资源属性窗口4.在菜单资源属性窗口中填写标题5.选中菜单标题填写的子菜单,并点击Enter键或者双击6.添加分割线,在菜单资源属性中点选分隔符(Separator)7.子菜单添加弹出菜单,菜单资源属性中点选弹出(Pop-up)8.给菜单添加快捷键,在标题后添加“&+字母”,则Alt+字母就是快捷键二、菜单项的命令处理1.命令设置在类向导中;打开类向导,点选Message Maps选项

2、卡2.打开Message Maps选项卡,Class name对应对话框;Object IDs对应菜单项ID;Messages对应事件:COMMAND单击事件3.选择COMMAND单击事件,点击Add Function,弹出创建窗口,点击OK4.在类向导中点击Edit Code按钮,显示命令处理函数三、动态创建菜单1.创建基于对话框的应用程序2.头文件中声明一个CMenu类对象m_Menu3.1在FileView选项卡中打开资源头文件(Resource.h),定义命令ID3.2在资源头文件中添加的代码如下#define ID_MENUCAT 1001#define ID_MENUDOG 100

3、2#define ID_MENUMONKEY10034.1在对话框OnInitDialog方法中创建菜单4.2创建菜单程序m_Menu.CreateMenu();CMenu m_PopMenu;m_PopMenu.CreatePopupMenu();m_Menu.AppendMenu(MF_POPUP,(UINT)m_PopMenu,m_hMenu,动物);m_PopMenu.AppendMenu(MF_STRING,ID_MENUCAT,猫);m_PopMenu.AppendMenu(MF_STRING,ID_MENUDOG,狗);m_PopMenu.AppendMenu(MF_STRING

4、,ID_MENUMONKEY,猴子);m_Menu.AppendMenu(MF_POPUP,-1,植物);m_PopMenu.Detach();SetMenu(&m_Menu);5.1在对话框的头文件中声明菜单的消息处理函数5.2程序afx_msg void OnMenucat();afx_msg void OnMenudog();afx_msg void OnMenumonkey();6.1在对话框源文件中添加消息映射宏,将命令ID关联到消息处理函数中6.2程序ON_COMMAND(ID_MENUCAT,OnMenucat)ON_COMMAND(ID_MENUDOG,OnMenudog)ON

5、_COMMAND(ID_MENUMONKEY,OnMenumonkey)7.1在对话框源文件中添加消息处理函数7.2程序void CMy124Dlg:OnMenucat() MessageBox(猫);void CMy124Dlg:OnMenudog() MessageBox(狗);void CMy124Dlg:OnMenumonkey() MessageBox(猴子);四、创建弹出式菜单1.创建基于对话框的应用程序2.在资源选项卡中右击,选择插入,在插入资源窗口中选择Menu 点击新建3.对菜单进行编辑4.在对话框头文件中声明一个CMenu类对象m_Menu5.在OnInitDialog方法

6、中调用LoadMenu方法加载菜单资源6.在类视图选项卡中,右击对话框程序节点,然后选择Add Windows Message Handler命令,在弹出的对话框中选择WM_RBUTTONUP事件,点击Add Handler ,点击确定:鼠标右键抬起触发m_Menu.LoadMenu(IDR_MENU1);7.1在鼠标右键抬起事件处理函数中添加代码7.2程序CMenu *pMenu = m_Menu.GetSubMenu(0);CRect rect;ClientToScreen(&point);rect.top = point.x;rect.left = point.y;pMenu-Track

7、PopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL,rect.top,rect.left,this,&rect);8.1给弹出菜单中添加文件增加单击事件8.2程序MessageBox(成功);五、创建图标菜单1.创建基于对话框的应用程序2.在工作区窗口选择Recource View选项卡,右击一个节点,弹出快捷菜单,点击Insert命令3.在插入资源窗口,选择菜单资源,插入并编辑4.新建一个类;打开类向导,创建类名为CMenuIcon,5.打开CMenuIcon类的头文件,为该类添加一个基类Cmenu6.1在CMenuIcon头文件中定义一个

8、数据结构,用来保存菜单信息6.2程序struct CMenuItemCStringm_ItemText;intm_IconIndex;intm_ItemID;7.1在CMenuIcon的头文件中声明成员变量7.2程序CMenuItem m_ItemLists50; intm_Index; intm_IconIndex; CImageListm_ImageList;8.1在CMenuIcon类的构造函数中初始化图像列表8.2程序m_Index=0;m_IconIndex=0;m_ImageList.Create(16,16,ILC_COLOR24|ILC_MASK,0,0);m_ImageLis

9、t.Add(AfxGetApp()-LoadIcon(IDI_ICON1);m_ImageList.Add(AfxGetApp()-LoadIcon(IDI_ICON2);m_ImageList.Add(AfxGetApp()-LoadIcon(IDI_ICON3);m_ImageList.Add(AfxGetApp()-LoadIcon(IDI_ICON4);m_ImageList.Add(AfxGetApp()-LoadIcon(IDI_ICON5);m_ImageList.Add(AfxGetApp()-LoadIcon(IDI_ICON6);9.1在CMenuIcon类中添加Attat

10、chMenu方法9.2AttatchMenu方法中添加程序9.3程序LoadMenu(m_uID);return TRUE;10.1在CMenuIcon类中添加MenuItem方法,并添加程序10.2BOOL CMenuIcon:MenuItem(CMenu *pMenu)if(pMenu!=NULL)int m_Count=pMenu-GetMenuItemCount();for(int i=0;iGetMenuString(i,m_ItemListsm_Index.m_ItemText,MF_BYPOSITION);int m_itemID=pMenu-GetMenuItemID(i);m

11、_ItemListsm_Index.m_ItemID=m_itemID;if(m_itemID0)m_ItemListsm_Index.m_IconIndex=m_IconIndex;m_IconIndex+=1;pMenu-ModifyMenu(i,MF_OWNERDRAW|MF_BYPOSITION|MF_STRING,m_ItemListsm_Index.m_ItemID,(LPSTR)&(m_ItemListsm_Index);m_Index+=1;CMenu *m_SubMenu=pMenu-GetSubMenu(i);if(m_SubMenu)MenuItem(m_SubMenu)

12、; return TRUE;11.1重载CMenuIcon类中MeasureItem虚拟方法,计算菜单项的大小11.2程序1. 在类上方右击,选择新建成员函数,并创建void CMenuIcon:MeasureItem(LPMEASUREITEMSTRUCT IpStruct)if(IpStruct-CtlType=ODT_MENU)IpStruct-itemHeight=ITEMHEIGHT;IpStruct-itemWidth=ITEMWIDTH;CMenuItem* m_item;m_item=(CMenuItem*)IpStruct-itemData;IpStruct-itemWidt

13、h=(CMenuItem*)IpStruct-itemData)-m_ItemText.GetLength()*10;if(m_item-m_ItemID=0)IpStruct-itemHeight=2;12.1在CMenuIcon类中添加DrawItemText成员函数,绘制菜单项文本12.2程序void CMenuIcon:DrawItemText(CDC *pDC, LPSTR Str, CRect Rect)pDC-DrawText(Str,Rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);13.1在CMenuIcon类中添加DrawItemIcon成员

14、函数,绘制菜单项图标13.2程序void CMenuIcon:DrawItemIcon(CDC *pDC, CRect Rect, int Icon)m_ImageList.Draw(pDC,Icon,CPoint(Rect.left+2,Rect.top+4),ILD_TRANSPARENT);14.1在CMenuIcon类中添加DrawSeparater成员函数,绘制分隔条14.2程序void CMenuIcon:DrawSeparater(CDC *pDC, CRect Rect)pDC-Draw3dRect(Rect,RGB(255,0,255),RGB(255,0,255);15.1

15、在CMenuIcon类中添加DrawTopMenu成员函数,绘制顶层菜单15.2程序void CMenuIcon:DrawTopMenu(CDC *pDC, CRect Rect, BOOL Selected)if(Selected)pDC-Rectangle(&Rect);Rect.DeflateRect(1,1);pDC-FillSolidRect(Rect,RGB(192,170,220);elsepDC-FillSolidRect(&Rect,RGB(192,192,192);16.1在CMenuIcon类中添加DrawComMenu成员函数,绘制普通菜单项16.2程序void CMe

16、nuIcon:DrawComMenu(CDC *pDC, CRect Rect, BOOL Selected)if(Selected)pDC-Rectangle(&Rect);Rect.DeflateRect(1,1);pDC-FillSolidRect(Rect,RGB(255,0,0);elsepDC-FillSolidRect(&Rect,RGB(255,255,255);17.1重载CMenuIcon类中DrawItem虚拟方法,根据菜单项的不同状态绘制菜单项17.2程序void CMenuIcon:DrawItem(LPDRAWITEMSTRUCT IpStruct)if(IpStr

17、uct-CtlType=ODT_MENU)if(IpStruct-itemData=NULL)return;unsigned int m_state=IpStruct-itemState;CDC* pDC=CDC:FromHandle(IpStruct-hDC);CString str = (CMenuItem*)(IpStruct-itemData)-m_ItemText;LPSTR m_str = str.GetBuffer(str.GetLength();int m_itemID=(CMenuItem*)(IpStruct-itemData)-m_ItemID;int m_itemico

18、n=(CMenuItem*)(IpStruct-itemData)-m_IconIndex;CRect m_rect=IpStruct-rcItem;pDC-SetBkMode(TRANSPARENT);switch(m_itemID)case -1:DrawTopMenu(pDC,m_rect,(m_state&ODS_SELECTED)|(m_state&0x0040);DrawItemText(pDC,m_str,m_rect);break;case 0:DrawSeparater(pDC,m_rect);break;default:DrawComMenu(pDC,m_rect,m_state&ODS_SELECTED);DrawItemText(pDC,m_str,m_rect);DrawItemIcon(pDC,m_rect,m_itemicon);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论