效果预览
先看最终效果,有个直观感受。
这个是最普通的二级菜单,每个菜单项画了一张图片。
图一
我们经常看到下面这种菜单:左边是个小图标,右边是文字,这样的效果我们也可以做出来,见图三:
图二
唯一不同的是……我们的图片和菜单项……个头儿都很大……
图三
上边都是单列的,能不能多列呢?能!在资源编辑器中把要选择一个菜单项,设置其“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
然后在资源编辑器中新增一个菜单,为了演示的丰富一些,