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