VC++控件使用——菜单

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

VC++简单应用指南四——菜单一、菜单资源设计1.打开工作区窗口,在ResourceView选项卡中,右击,选择插入2.打开插入资源对话框,选择Menu节点,点击新建3.打开菜单资源设计窗口,再按Enter键,显示菜单资源属性窗口4.在菜单资源属性窗口中填写标题5.选中菜单标题填写的子菜单,并点击Enter键或者双击6.添加分割线,在菜单资源属性中点选分隔符(Separator)7.子菜单添加弹出菜单,菜单资源属性中点选弹出(Pop-up)8.给菜单添加快捷键,在标题后添加“&+字母”,则Alt+字母就是快捷键二、菜单项的命令处理1.命令设置在类向导中;打开类向导,点选MessageMaps选项卡2.打开MessageMaps选项卡,Classname对应对话框;ObjectIDs对应菜单项ID;Messages对应事件:COMMAND单击事件3.选择COMMAND单击事件,点击AddFunction,弹出创建窗口,点击OK4.在类向导中点击EditCode按钮,显示命令处理函数三、动态创建菜单1.创建基于对话框的应用程序2.头文件中声明一个CMenu类对象m_Menu3.1在FileView选项卡中打开资源头文件(Resource.h),定义命令ID3.2在资源头文件中添加的代码如下#defineID_MENUCAT1001#defineID_MENUDOG1002#defineID_MENUMONKEY10034.1在对话框OnInitDialog方法中创建菜单4.2创建菜单程序m_Menu.CreateMenu();CMenum_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,ID_MENUMONKEY,猴子);m_Menu.AppendMenu(MF_POPUP,-1,植物);m_PopMenu.Detach();SetMenu(&m_Menu);5.1在对话框的头文件中声明菜单的消息处理函数5.2程序afx_msgvoidOnMenucat();afx_msgvoidOnMenudog();afx_msgvoidOnMenumonkey();6.1在对话框源文件中添加消息映射宏,将命令ID关联到消息处理函数中6.2程序ON_COMMAND(ID_MENUCAT,OnMenucat)ON_COMMAND(ID_MENUDOG,OnMenudog)ON_COMMAND(ID_MENUMONKEY,OnMenumonkey)7.1在对话框源文件中添加消息处理函数7.2程序voidCMy124Dlg::OnMenucat(){MessageBox(猫);}voidCMy124Dlg::OnMenudog(){MessageBox(狗);}voidCMy124Dlg::OnMenumonkey(){MessageBox(猴子);}四、创建弹出式菜单1.创建基于对话框的应用程序2.在资源选项卡中右击,选择插入,在插入资源窗口中选择Menu点击新建3.对菜单进行编辑4.在对话框头文件中声明一个CMenu类对象m_Menu5.在OnInitDialog方法中调用LoadMenu方法加载菜单资源6.在类视图选项卡中,右击对话框程序节点,然后选择AddWindowsMessageHandler命令,在弹出的对话框中选择WM_RBUTTONUP事件,点击AddHandler,点击确定:鼠标右键抬起触发m_Menu.LoadMenu(IDR_MENU1);7.1在鼠标右键抬起事件处理函数中添加代码7.2程序CMenu*pMenu=m_Menu.GetSubMenu(0);CRectrect;ClientToScreen(&point);rect.top=point.x;rect.left=point.y;pMenu-TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL,rect.top,rect.left,this,&rect);8.1给弹出菜单中添加文件增加单击事件8.2程序MessageBox(成功);五、创建图标菜单1.创建基于对话框的应用程序2.在工作区窗口选择RecourceView选项卡,右击一个节点,弹出快捷菜单,点击Insert命令3.在插入资源窗口,选择菜单资源,插入并编辑4.新建一个类;打开类向导,创建类名为CMenuIcon,5.打开CMenuIcon类的头文件,为该类添加一个基类Cmenu6.1在CMenuIcon头文件中定义一个数据结构,用来保存菜单信息6.2程序structCMenuItem{CStringm_ItemText;intm_IconIndex;intm_ItemID;};7.1在CMenuIcon的头文件中声明成员变量7.2程序CMenuItemm_ItemLists[50];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_ImageList.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类中添加AttatchMenu方法9.2AttatchMenu方法中添加程序9.3程序LoadMenu(m_uID);returnTRUE;10.1在CMenuIcon类中添加MenuItem方法,并添加程序10.2BOOLCMenuIcon::MenuItem(CMenu*pMenu){if(pMenu!=NULL){intm_Count=pMenu-GetMenuItemCount();for(inti=0;im_Count;i++){pMenu-GetMenuString(i,m_ItemLists[m_Index].m_ItemText,MF_BYPOSITION);intm_itemID=pMenu-GetMenuItemID(i);m_ItemLists[m_Index].m_ItemID=m_itemID;if(m_itemID0){m_ItemLists[m_Index].m_IconIndex=m_IconIndex;m_IconIndex+=1;}pMenu-ModifyMenu(i,MF_OWNERDRAW|MF_BYPOSITION|MF_STRING,m_ItemLists[m_Index].m_ItemID,(LPSTR)&(m_ItemLists[m_Index]));m_Index+=1;CMenu*m_SubMenu=pMenu-GetSubMenu(i);if(m_SubMenu){MenuItem(m_SubMenu);}}}returnTRUE;}11.1重载CMenuIcon类中MeasureItem虚拟方法,计算菜单项的大小11.2程序1.在类上方右击,选择新建成员函数,并创建voidCMenuIcon::MeasureItem(LPMEASUREITEMSTRUCTIpStruct){if(IpStruct-CtlType==ODT_MENU){IpStruct-itemHeight=ITEMHEIGHT;IpStruct-itemWidth=ITEMWIDTH;CMenuItem*m_item;m_item=(CMenuItem*)IpStruct-itemData;IpStruct-itemWidth=((CMenuItem*)IpStruct-itemData)-m_ItemText.GetLength()*10;if(m_item-m_ItemID==0){IpStruct-itemHeight=2;}}}12.1在CMenuIcon类中添加DrawItemText成员函数,绘制菜单项文本12.2程序voidCMenuIcon::DrawItemText(CDC*pDC,LPSTRStr,CRectRect){pDC-DrawText(Str,Rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);}13.1在CMenuIcon类中添加DrawItemIcon成员函数,绘制菜单项图标13.2程序voidCMenuIcon::DrawItemIcon(CDC*pDC,CRectRect,intIcon){m_ImageList.Draw(pDC,Icon,CPoint(Rect.left+2,Rect.top+4),ILD_TRANSPARENT);}14.1在CMenuIcon类中添加DrawSeparater成员函数,绘制分隔条14.2程序voidCMenuIcon::DrawSeparater(CDC*pDC,CRectRect){pDC-Draw3dRect(Rect,RGB(255,0,255),RGB(255,0,255));}15.1在CMenuIcon类中添加DrawTopMenu成员函数,绘制顶层菜单15.2程序voidCMenuIcon::DrawTopMenu(CDC*pDC,CRectRect,BOOLSelected){if(Selected){pDC-Rectangle(&Rect);Rect.DeflateRect(1,1);pDC-FillSolidRect(Rect,RGB(192,170,220));}else{pDC-FillSolidRect(&Rect,RGB(192,192,192));}}16.1在CMenuIcon类中添加DrawComMenu成员函数,绘制普通菜单项16.2程序voidCMenuIcon::DrawComMenu(CDC*pDC,CRectRect,BOOLSelected){if(Selected){pDC-Rectangle(&Rect);Rect.DeflateRect(1,1);pDC-FillSolidRect(Rect,RGB(255,0,0));}else{pDC-FillSolidRect(&Rect,RGB(255,255,255));}}17.1重载CMenuIcon类中DrawItem虚拟方法,根据菜单项的不同状态绘制菜单项17.2程序voidCMenuIcon::DrawItem(LPDRAWITEMSTRUCTIpStruct){if(IpStruct-CtlType==ODT_MENU){if(IpStruct-itemData==NULL)return;unsignedintm_state=IpStruct-itemState;CDC*pDC=CDC::FromHandle(IpStruct-hDC);CStringstr=((CMen

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功