Win32 C ++ Subclassed标签在调用WM_SETTEXT后未接收WM_PAINT

时间:2017-12-23 19:05:02

标签: c++ winapi paint subclassing

在您调用WM_SETTEXT后,子类控件是否接收WM_PAINT是否是正常行为?

父级确实接收WM_CTLCOLOR,但我想在我的子类WM_PAINT消息中绘制evertything。

我假设在调用WM_SETTEXT之后调用InvalidateRect是要走的路?

如果您想查看代码,请告诉我。我觉得这个问题没有必要,这就是为什么我最初把它排除在外。

1 个答案:

答案 0 :(得分:1)

是否响应WM_SETTEXT发送WM_PAINT取决于哪个窗口类已被子类化,例如按钮无效但列表框不是(列表框的窗口文本仅仅是调试辅助,因为它是没有在UI中显示。)

如果您的类设置文本应该无效,您可以随时向您的子类'WindowProc添加类似以下内容:

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

这样,每次设置控制文本时都不需要InvalidateRect。