改变static控件的字体颜色,但是没有成功,望高手指教!多谢
改变static控件的字体颜色,但是没有成功,望高手指教!谢谢
网上找的方法不成功。
1、现象就是不能刷新,如果拖动窗口,会发现字体颜色更改了,但是窗口的状态栏和边框都会显示不全,窗口显示的支离破碎的,本人才疏学浅。哪位高人,告我我这是什么原因。
2、如果用钩子如何实现更改static文字颜色?
下面是网上的代码:
------解决方案--------------------
响应WM_COLORCTRL
------解决方案--------------------
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的返回值。
网上找的方法不成功。
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;
// }
------解决方案--------------------
响应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的返回值。