WEB开发网
开发学院软件开发VC 自绘菜单的实现 阅读

自绘菜单的实现

 2008-01-19 20:24:00 来源:WEB开发网   
核心提示:CMenuEx::LoadToolBar(UINT uToolBar, UINT uFace)接口,请注意它的两个参数:uToolBar 是工具条的资源,自绘菜单的实现(2),uFace 是一个替代位图的资源ID,因为VC6.0中做一个真彩工具栏并不是一件容易的事,所以我做了一个小动作:用IDE的资源编辑器随便编辑一个
CMenuEx::LoadToolBar(UINT uToolBar, UINT uFace)

接口,请注意它的两个参数:uToolBar 是工具条的资源,uFace 是一个替代位图的资源ID。因为VC6.0中做一个真彩工具栏并不是一件容易的事,所以我做了一个小动作:用IDE的资源编辑器随便编辑一个工具条,只要ID和菜单ID相对应即可,然后可以用外部编辑器编辑好真正要使用的位图(顺序和工具条资源的顺序一样),并把该位图作为uFace参数传入,菜单就可以有真彩图标了。

CMenuEx还提供了如下三个接口:

BOOL ModifyMenuEx()
BOOL AppendMenuEx()
BOOL RemoveMenuEx()

功能一目了然,只是增加了对自绘风格的处理,应用的时候只要像调用普通的CMenu::AppendMenu()等函数一样就自动拥有自绘风格了。我写这篇文章的目的在于提出菜单派生类调用 MeasureItem() 和 DrawItem()的问题。至于实现漂亮的菜单界面主要工作当然还是在 DrawItem() 函数中做,有特殊需要的可以自行定义 MENUITEM 结构,重新写 DrawItem() 函数。我没有提供设置菜单附加位图的具体代码,相信这个不是问题。你可以很容易的通过重写 DrawItem()实现。有必要提醒的是:有关一个菜单项的信息最好能完全从一个MENUITEM结构中取得,使

virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMIS);
virtual void DrawItem(LPDRAWITEMSTRUCT lpDIS);

两个函数完全不依赖于CMenuEx类的数据成员。

要在工程中使用CMenuEx很简单:

  1. 把MenuEx.h和MenuEx.cpp加入到你的工程中;
  2. 声明一个CMenuEx对象.例如m_Menu;
  3. 调用m_Menu.LoadMenu(IDR_MENU1),读入菜单;
  4. 若需要使用菜单位图则调用m_Menu.LoodToolBar();

效果如下:

主菜单

弹出式菜单

最后,对《一种漂亮的自绘菜单》的作者郑恒给予我的帮助表示衷心感谢!

上一页  1 2 

Tags:菜单 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接