要是想写类似3DMax那样的菜单,真不容易,我很欣赏它菜单项一分为二的做法,即可以选择常用命令,又可以选择上下文对话框,
如图中的【移动】命令。还有比较好的就是菜单类别分组,对于一个编辑软件来说,如果上下文的内容变化较大,
这样确实很方便,就不必在长长的上下文菜单中去费力的找了。
完全自绘代码量较大(不从CMenu继承而来),有点不易。
上次玩DirectX,不知道怎么搞的,键盘只能输入字母了,又不想重启,结果聊天说了几句E文,被MM臭骂 L,这次菜单又搞成这样了。
再者,有些自绘在XP下还挺不错,在Vista下就不堪入目了,而且Vista下使用GDI高级绘图模式时的变换也跟XP有点不一样。
《Windows图形编程》中的【ColorSapce】示例程序在两者下显示也不相同(可能我没完全搞懂)。
MFC向导生成的SDI程序,菜单项前面是不会绘制图标的。但与工具栏对应的命令项却提供图标显示。
目前学习别人写的菜单代码中,都是通过安装Hook的方法实现。
这种方式下,解决的问题主要有下面几个:
1:是菜单项与工具栏图标数据的存放——二者共享图像数据,当然这主是程序结构设计上面的事了。
2:管理拥有菜单显示的窗口
3:菜单的自绘——图标、高亮显示、其它特效
4:菜单命令项快捷键处理
在《想做个换肤窗口》一文中,我展示了SDI程序的非客户区,在那里菜单也是属于非客区。
但是通过Spy++观察Office 2003、Windows资源管理器等,将会发现这些菜单栏都是独立的窗口,
我用自绘的菜单类做了Demo测试后,得出结论,我需要独立的窗口放置菜单。