//将状态显示设置为红色
LRESULTXXXX::OnCtlColorStatic(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
HDC hdc = (HDC)wParam;
HWND hWnd = (HWND)lParam;
if (m_bInitFontSize)
{
//根据屏幕分辨率,调整提示的字体大小
int cxScreen = GetSystemMetrics (SM_CXSCREEN);
int cyScreen = GetSystemMetrics(SM_CYSCREEN);
int nFontWidth = int((float)cxScreen / 1392.0f * 10.0f);
int nFontHeight = int((float)cyScreen / 768.0f * 16.0f);
m_hStaticControlFont = CreateFont(nFontHeight,nFontWidth,0L,0L,FW_NORMAL,FALSE,FALSE,FALSE,
GB2312_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
FF_MODERN,_T("宋体"));
m_bInitFontSize = false;
}
::SelectObject(hdc, m_hStaticControlFont);
if(hWnd == GetDlgItem(IDC_STATUSINFO))
{
::SetTextColor(hdc,RGB(255,0,0L));
::SetBkColor(hdc,RGB(255,255,255));
return (LRESULT)GetStockObject(NULL_BRUSH) ;
}
bHandled = FALSE;
return 0L;
}
通过处理WM_CTLCOLORSTATIC消息,必需注意以下几点:
1、 MFC没有使用WM_CTLCOLORSTATIC消息,而是使用WM_CTLCOLOR消息;
2、必须返回一个背景刷子,即使你不改变背景颜色;如果STATIC的背景色要与父窗口背景色相同,可以用GetStockObject(NULL_BRUSH) 返回空画刷;
3、返回的画刷颜色并不是文字的颜色,如果要改变文字颜色,可以调用SetTextColor;
4、不要每次处理都创建一个刷子,应该用一个成员变量来保存刷子(全局变量也可),并要释放它,如果是由GetStockObject返回的刷子,就不用那么麻烦