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消息就可以轻轻松松的自绘出稳定的系统菜单。

     

  • 相关阅读:
    1061 Dating (20 分)
    1042 Shuffling Machine (20 分)简单模拟
    1132 Cut Integer (20 分)
    1100 Mars Numbers (20 分)
    1077 Kuchiguse (20 分)求字符串最长相同后缀
    1065 A+B and C (64bit) (20 分)大数 溢出
    1107 Social Clusters (30 分)并查集
    1079 Total Sales of Supply Chain (25 分)
    1078 Hashing (25 分)
    1063 Set Similarity (25 分)
  • 原文地址:https://www.cnblogs.com/lidabo/p/3060500.html
Copyright © 2011-2022 走看看