WTL-Menu自绘

本文介绍了如何使用WTL库实现Windows菜单的自定义绘制。通过修改菜单为OwnerDraw风格,在WM_CONTEXTMENU、WM_INITMENUPOPUP、WM_MEASUREITEM和WM_DRAWITEM消息中进行处理,实现了包括调整菜单宽高、自定义菜单项图片等功能。示例代码展示了如何在WM_DRAWITEM消息中使用GDI函数绘制菜单项,并提供了完整的源码工程链接。
摘要由CSDN通过智能技术生成

  windows下控件很多,但常用的其实没几个。我们先从菜单说起。

效果预览

  先看最终效果,有个直观感受。

  这个是最普通的二级菜单,每个菜单项画了一张图片。

图一


  我们经常看到下面这种菜单:左边是个小图标,右边是文字,这样的效果我们也可以做出来,见图三:


图二

  唯一不同的是……我们的图片和菜单项……个头儿都很大……


图三

  

  上边都是单列的,能不能多列呢?能!在资源编辑器中把要选择一个菜单项,设置其“Break”属性为"Column",那么这个菜单项的下一项将另起一列。代码里也能修改这个属性。效果见图四:


图四


菜单的基本概念

  有几个基本概念,后面会用上,请大家耐心看完。请看图:

图五

  红框所在位置叫MenuBar,直译过来就是“菜单栏”。MainMenu、Menu2、SubMenuA这些叫MenuItem,直译就是“菜单项”

  蓝框里的是被弹出来的叫SubMenu,直译就是“子菜单”,就是大家日常看到的、直接使用的东西。

 

菜单自绘

步骤:

  1.  在WM_CONTEXTMENU消息响应里,用LoadMenu载入菜单栏,用GetSubMenu载入要显示的子菜单,用TrackPopupMenu(或TrackPopupMenuEx)弹出菜单

  2.  在WM_INITMENUPOPUP中修改各MenuItem为OwnerDraw风格

  3.  在WM_MEASUREITEM中按个人需要修改MenuItem宽、高

  4.  在WM_DRAWITEM中使用DRAWITEMSTRUCT结构体中的hDc和rcItem,结合GDI函数,绘制MenuItem

  接下来,我们将以对话框程序,右键弹出菜单的形式,讲解菜单自绘方法。

WM_CONTEXT中弹出弹出菜单

首先新建一个基于对话框的WTL项目,关于WTL开发环境的配置、向导的安装请自行google

然后在资源编辑器中新增一个菜单,为了演示的丰富一些,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值