改变static控件的字体颜色,但是没有成功,望高手指教!多谢

改变static控件的字体颜色,但是没有成功,望高手指教!谢谢
本帖最后由 VisualEleven 于 2014-05-13 16:18:16 编辑
网上找的方法不成功。
1、现象就是不能刷新,如果拖动窗口,会发现字体颜色更改了,但是窗口的状态栏和边框都会显示不全,窗口显示的支离破碎的,本人才疏学浅。哪位高人,告我我这是什么原因。
2、如果用钩子如何实现更改static文字颜色?

下面是网上的代码:
// case   WM_CTLCOLORSTATIC:
// {
// if((HWND)lParam   ==   shenqing_static_hwnd[1])
// {
// SetTextColor((HDC)wParam,   0xff0000);//RGB(0,0,0));//更改字体颜色
// }
// else
// {
// SetTextColor((HDC)wParam,   GetSysColor(COLOR_WINDOWTEXT));
// }
// SetBkColor((HDC)wParam,   GetSysColor(COLOR_BTNFACE));//绘制背景颜色
// SetWindowLong(mainhwnd,   DWL_MSGRESULT,   (LONG)TRUE);//执行上面的更改
// return   (LRESULT)GetSysColorBrush(NULL_BRUSH);//COLOR_BTNFACE);//返回一个画刷,这样系统才能利用这个画刷重绘控件的颜色
// return (INT_PTR)CreateSolidBrush(RGB(255,255,255));
// break;
        //      }
 
------解决方案--------------------
本帖最后由 VisualEleven 于 2014-05-13 16:23:40 编辑
响应WM_COLORCTRL

HBRUSH CUI_NEWDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
    if(CTLCOLOR_STATIC == nCtlColor)
    {
        pDc->SetTextColor(RGB(0,0,0));  //设字色彩
        pDc->SetBkColor(RGB(0,0,0));    //设字背景色彩(注意不是整个控件的背景色彩)
        pDc->SetBkMode(1);                     //设字背景色彩模式(是否透明)
        //如果需要对整个控件区域的背景色彩进行修改需在此
        return (HBRUSH) CreateSolidBrush(RGB(255,0,0));
    }
}

------解决方案--------------------
WM_CTLCOLORSTATIC代码的两个问题:

return (INT_PTR)CreateSolidBrush(RGB(255,255,255));

CreateSolidBrush是创建画刷,需要调用DeleteObject释放的,直接return,没有释放,时间长了资源耗尽。应该事先创建好,然后返回,退出时释放,而不是每次都创建。

如果是对话框,并且消息需要返回的不是BOOL值,要调用SetWindowLong(mainhwnd,DWL_MSGRESULT,返回值);来使返回值生效,WM_CTLCOLORSTATIC需要返回画刷句柄,因此应该是
SetWindowLong(mainhwnd,DWL_MSGRESULT,(LONG)hbr);//hbr是调用CreateSolidBrush的返回值。