不使用HOOK实现系统菜单的自绘

 

/***************************************************************************************************************************************************************************************
*标题:不使用HOOK实现系统菜单的自绘
*作者:裴具才
*QQ:592123987
***************************************************************************************************************************************************************************************/
       关于普通菜单的自绘,网上的例子很多,做的都还不错,但系统菜单的自绘例子缺很少,主要使用的都是HOOK,以A Revolutionary New Approach to Custom  Drawn Menus

(http://www.codeproject.com/KB/menus/skinmenu.aspx)这篇文章为代表。这篇文章的作者主要使用贴图去掉菜单的默认颜色实现的(使用TransparentBlt就可以搞定所有菜单的自绘,当然还有一些细节问题),我曾经也使用了他的这种方法去实现系统菜单的自绘,发现效果并不是很理想,会有一些颜色去除的不干净,仔细观察的话,原作者提供的Demo中也存在这样的问题,原作者做了一些细节方面的处理,问题不是太明显。
  
    仔细观察了下一些比较流行的界面库(像SKin++等)、PPS、浩方软件等自绘的系统菜单不存在上述问题。网上还有一种比较流行的菜单自绘的方法:
名称:简简单单:三个函数实现框架菜单自绘
作者:无心_所爱
网址:http://www.vckbase.com/document/viewdoc/?id=1583
         这篇文章的作者很大程度上简化了菜单的自绘,缺陷是没有实现系统菜单的自绘,第二次弹出系统菜单的时候才开始自绘,有时候一直都是默认的系统菜单,不稳定。问什么第一次弹出的时候没有自绘???那我要是在WM_INITMENU和WM_INITMENUPOPUP子前的消息中就修改系统菜单项可不可以?答案是可以的。我们在基于对话框的程序中默认的MFC会给我们添加一个About对话框的菜单项,是在WM_INITDIALOG消息中添加的,这说明这时系统菜单创建,我们可以在这修改系统菜单项的属性。在单文档的程序里可以在CMainFrame::OnCreate中修改系统菜单项的自绘属性。

修改之后响应对话框的WM_MEASUREITEM和WM_DRAWITEM消息就可以轻轻松松的自绘出稳定的系统菜单。

 

     本人喜欢界面编程,正在做像SKin++一样的界面库,希望有同样爱好的朋友可以加我好友,便于交流学习!

源码:点击此处下载

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值