zoukankan      html  css  js  c++  java
  • 不使用HOOK实现系统菜单的自绘

    关于普通菜单的自绘,网上的例子很多,做的都还不错,但系统菜单的自绘例子缺很少,主要使用的都是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消息就可以轻轻松松的自绘出稳定的系统菜单。

     

  • 相关阅读:
    perl6检测网站CMS脚本(测试代码)
    perl6 struct2-045 EXP
    perl6 单线程破解phpmyadmin脚本
    perl6 登录phpmyadmin
    PHP反序列化漏洞学习
    PHP对象5: define / const /static
    PHP对象4: final 不允许重写方法或不允许继承类
    ISCC之misc复现-High起来!
    宁波市第二届CTF之cripto1
    宁波市第二届CTF部分WP之msc1,msc2
  • 原文地址:https://www.cnblogs.com/lidabo/p/3060500.html
Copyright © 2011-2022 走看看