一种漂亮的自绘菜单_第1页
一种漂亮的自绘菜单_第2页
一种漂亮的自绘菜单_第3页
一种漂亮的自绘菜单_第4页
全文预览已结束

下载本文档

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

文档简介

1、一种漂亮的自绘菜单以前还是菜鸟时就觉得QQ的菜单做得很漂亮,想着自已的程序如果有那种菜单多好。现在积累了一定的知识,就自已设计了一个类似的菜单控件类。并把它发表出来供大家使用和参考,难免有不足的地方请高手不吝赐教!菜单效果如下:一、CMenuEx菜单类主要接口函数:1、void InitMenu(CMenu *pMenu,UINT uToolBar,CToolBar *pToolBar);说明:这是最主要的一个接口。如果要改变主窗口的菜单则应在主窗口的OnInitMenu(CMenu *pMenu)中调用该函数(如:m_menu.InitMenu(pMenu,IDR_MAINFRAME,&am

2、p;m_wndToolBar),当然主窗口必须要有工具栏,才会产生菜单项位图。最后还必须重载主窗口的OnMeasureItem()和OnDrawItem()。并在两个函数中分别调用菜单类的另外两个接口DrawItem()和MeasureItem();2、void SetHighLightColor(COLORREF crColor);3、void SetBackColor(COLORREF);4、void SetTextColor(COLORREF);以上三个接口应该不用再说明 。QQ的菜单采用的颜色是SELECTTEXT_COLOR RGB(0,0,127)TEXT_COLOR RGB(0,

3、0,0)BK_COLOR RGB(143,167,207) 效果不错5、void SetImageLeft(UINT idBmpLeft)说明:这也是个重要的接口。要实现纵向位图(像“开始”菜单)。可以在适当的地方调用该函数。参数当然是位图的ID值。注意选择位图时要选好看一点的哦!要记得高宽的比例。6、void InitPopupMenu(CMenu *pMenu,UINT uToolBar,CToolBar *pToolBar)与InitMenu不同的是:InitMenu并不修改第一级菜单为自绘风格,而该函数有包括第一级菜单.但必须注意:该类的任一实例都只能调用这两个函数中的一个,不能一同使

4、用!二、CMenuEx类的具体使用步骤:2.1 用CMenuEx类加载主窗口菜单的具体步骤:1、添加CMenuEx成员变量CMenuEx m_menu2、CMainFrame类添加WM_INITMENU消息,并在实现函数中加入代码: m_menu.InitMenu(pMenu,IDR_MAINFRAME,&m_wndToolBar);IDR_MAINFRAME是工具栏资源ID,m_wndToolBar是工具栏对象 3、CMainFrame类添加WM_DRAWITEM和WM_MEASUREITEM消息,并在实现函数分加入: if(!nIDCtl) m_menu.DrawItem(lpDr

5、awItemStruct);if(!nIDCtl) m_menu.MeasureItem(lpMeasureItemStruct);只须这三步就大功造成了!但是有时你会发现菜单的位图错位了,这不是程序的错。这是因为“工具栏位图”的个数与“工具栏按钮个数”不符,你只需把不用的位图删掉就可以,或者添加对应的菜单项,反正使这两个数目一致就对了4、如果你想要让你的菜单拥有“纵向位图”(像“开始”菜单),就必须在CMainFrame在OnCreate()中加入: m_menu.SetImageLeft(IDB_BITMAP1);/IDB_BITMAP1是指定位图2.2 用CMenuEx类加载弹出菜单的具

6、体步骤:1、在CChildView类中加入成员变量 CMenuEx m_menu和CToolBar *m_pToolBar 为什么要加入m_pToolBar,这里做一下说明:因为在CMenuEx的接口函数InitPopupMenu()中需要工具栏对象指针,而工具栏对象又偏偏是CMainFrame类的成员所以设此指针变量指向工具栏对象2、给CChildView类的成员m_pToolBar赋值。当CView派生类由不得CxxxxDocTemplate产生时,赋值的地方比较特殊请在CxxxWinApp类中的InitInstance()的最后加入代码:CMainFrame *pFrame=(CMain

7、Frame *)m_pMainWnd;CChildView *pView=(CChildView *)pFrame->GetActiveView();pView->m_pToolBar=&(pFrame->m_wndToolBar);/注意:原m_wndToolBar是私有变量,要改成public的哦!当CView派生类是CMainFrame类的成员变量时,就很简单,直接在OnCreate()中设置3、在CChildView的构造函数中加入设置弹出菜单的代码 m_menu.CreatePopupMenu();m_menu.AppendMenu(0,ID_EDIT_UN

8、DO,"撤消");m_menu.AppendMenu(MF_SEPARATOR,0);m_menu.AppendMenu(0,ID_EDIT_COPY,"复制");m_menu.AppendMenu(0,ID_EDIT_CUT,"剪切");m_menu.AppendMenu(0,ID_EDIT_PASTE,"粘贴");/当菜单ID与工具栏按钮ID一样时就会显示位图4、在CChildView的析构函数中加入代码:m_menu.DestroyMenu(); /释放资源5、在CChildView类中加入WM_INITMENUPOPUP消息,并在其实现函数中加入代码:if(!bSysMenu)m_menu.InitPopupMenu(pPopupMenu,IDR_MAINFRAME,m_pToolBar);6、在CChildView类中加入WM_CONTEXTMENU消息,并在其实现函数中加入弹出菜单的代码: m_menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x,point.y,this);好了!介绍完了。大家可以在适当的地方(比如CMainFrame:OnC

温馨提示

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

评论

0/150

提交评论