代码之家  ›  专栏  ›  技术社区  ›  Joey Muiser

调用WM\U SETTEXT后,Win32 C++子类标签未接收WM\U PAINT

  •  1
  • Joey Muiser  · 技术社区  · 7 年前

    子类控件在调用WM\u SETTEXT后不接收WM\u PAINT,这是正常行为吗?

    父级确实收到WM\U CTLCOLOR,但我想在子类WM\U paint消息中绘制所有内容。

    我想在调用WM\u SETTEXT之后再调用invalidateprister是正确的方法?

    如果您想查看代码,请告诉我。我觉得这个问题没有必要,这就是为什么我一开始就把它漏掉了。

    1 回复  |  直到 7 年前
        1
  •  2
  •   SoronelHaetir    7 年前

    WM\U PAINT是否响应WM\U SETTEXT发送取决于子类是什么窗口类,例如按钮无效,但列表框无效(列表框的窗口文本只不过是一种调试辅助工具,因为它没有显示在UI中)。

    如果您的类设置文本应无效,则始终可以向子类“WindowProc”添加如下内容:

    case WM_SETTEXT: {
      LRESULT res = CallWindowProc(lpfnParent, hWnd, WM_SETTEXT, wParam, lParam);
      InvalidateRect(hWnd, nullptr, true);
      return res;
    }
    

    这样,您就不需要每次设置控件文本时都有一个InvalidateBu立。