InvalidateRect() 是否足以要求系统重绘静态控件背景?
Is InvalidateRect() enough to ask system to redraw a static control background?
我需要更改静态控件的字体颜色和背景颜色。该颜色是通过处理 WM_CTLCOLORSTATIC
消息设置的:
case WM_CTLCOLORSTATIC:
{
HDC hdcStatic = (HDC) wParam;
SetTextColor(hdcStatic, RGB(fColor.R, fColor.G,fColor.B));
SetBkMode(hdcStatic, TRANSPARENT);
if(hBrush) DeleteObject(hBruash); // free previous brush
hBrush = CreateSolidBrush(RGB(bColor.R, bColor.G, bColor.B));
return (LRESULT) hBrush;
}
我这样调用 InvalidateRect()
,通过单击按钮:
case WM_COMMAND:
switch(LOWORD(wParam))
{
case BUTTONA_ID:
InvalidateRect(hLabel, NULL, TRUE);
break;
}
break;
这是要求重绘标签并更改其字体和背景颜色的正确方法吗?
It this the proper way to ask to the label to be redraw and change its font and background colors?
是的,静态控件不一定会在绘制文本之前擦除其背景。
所以你可以强制控件无效,这样你就可以轻松地重绘文本,而无需执行其他额外的调用。
更多参考:CStatic does not invalidate every time its text is changed
我需要更改静态控件的字体颜色和背景颜色。该颜色是通过处理 WM_CTLCOLORSTATIC
消息设置的:
case WM_CTLCOLORSTATIC:
{
HDC hdcStatic = (HDC) wParam;
SetTextColor(hdcStatic, RGB(fColor.R, fColor.G,fColor.B));
SetBkMode(hdcStatic, TRANSPARENT);
if(hBrush) DeleteObject(hBruash); // free previous brush
hBrush = CreateSolidBrush(RGB(bColor.R, bColor.G, bColor.B));
return (LRESULT) hBrush;
}
我这样调用 InvalidateRect()
,通过单击按钮:
case WM_COMMAND:
switch(LOWORD(wParam))
{
case BUTTONA_ID:
InvalidateRect(hLabel, NULL, TRUE);
break;
}
break;
这是要求重绘标签并更改其字体和背景颜色的正确方法吗?
It this the proper way to ask to the label to be redraw and change its font and background colors?
是的,静态控件不一定会在绘制文本之前擦除其背景。
所以你可以强制控件无效,这样你就可以轻松地重绘文本,而无需执行其他额外的调用。
更多参考:CStatic does not invalidate every time its text is changed