1、在对话框程序中会用到很多按钮,但按钮的背景颜色什么的都不能用OnCtcolor来修改(static text、editbox都可以),请问大家对这一块是怎么处理的?其他的控件都穿彩色衣服,惟独按钮依旧走老土路线,难受。
2、在对话框程序中有很多个对话框,我是不是要在每个对话框中都调用OnCtcolor消息函数来处理啊,能不能在程序的什么地方一次性完成,不需要做这些重复性工作?

解决方案 »

  1.   

    subclass button,实现OwnerDraw,然后处理DrawItem(), 参考CButtonST等
      

  2.   

    1、把按钮设置BS_OWNERDRAW风格,在对话框中响应WM_DRAWITEM消息自绘;或者不用XP控件风格就可以响应WM_CTLCOLOR消息了。
    2、SetClassLong把WNDPROC改为自己的函数,在该函数中处理消息。
      

  3.   

    在stdafx.h文件的最后部分,把这些都删除,然后rebuild项目。
    //#ifdef _UNICODE
    #if defined _M_IX86
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #elif defined _M_IA64
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #elif defined _M_X64
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #else
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #endif
    //#endif
      

  4.   

    第一个问题你可以参考一下CButtonST,网上有很多资料
    第二个问题,你可以添加一个CDialog派生的类,把通用的属性都添加到这个类中,其它对话框用的时候就继承这个类