vc的几个换肤类都不是很好用。按照windows下的程序都要调用winapi的思路,认为delphi下的控件经过封装后可以使用在vc中。我用delphi的vclskin组件做了一个dll,在dialog类型的程序下,可以正常给程序换肤。但是在sdi、mdi的就不行了,主要表现在不能得到菜单指针(用AfxGetApp()->m_pMainWnd->getMenu)、不能正常绘制菜单的。找了一些书,象mfc深入浅出之类的没有找到头绪,希望大家指点迷津。

解决方案 »

  1.   

    实际上菜单是Windows系统提供的窗口特性,要实现换肤并不容易
    CNewMenu 使用了钩子的方式来处理,以使得菜单具有阴影,而且重新定义了 CFrameWnd,然后用宏定义的方式替换 MFC 向导生成的默认 CFrameWnd
    象 BCGControlBar 、 CJLib 采用的都是这种方式
      

  2.   

    参考 http://www.codeproject.com/cs/menu/
      

  3.   

    上面的链接给错了,应该是 http://www.codeproject.com/menu/
      

  4.   

    针对菜单的一些操作可以在WM_INITPOPMENU,和WM_INITMENU中操作。
    以前看过《未公开的Windows核心技术》中说,微软没有公开一些消息,其中就包括菜单弹出时的一些消息,呵呵,除非定义自画,否则很难操作菜单!