调用 WM_SETTEXT 后未收到 Win32 C++ 子类标签 WM_PAINT

Win32 C++ Subclassed label not receiving WM_PAINT after calling WM_SETTEXT

子类控件在调用 WM_SETTEXT 后未收到 WM_PAINT 是否正常?

parent 确实收到 WM_CTLCOLOR,但我想在我的子类 WM_PAINT 消息中绘制所有内容。

我假设在调用 WM_SETTEXT 之后调用 InvalidateRect 是正确的方法吗?

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

是否发送 WM_PAINT 以响应 WM_SETTEXT 取决于 window class 被子class 的内容,例如按钮无效但列表框不是(列表框的 window 文本只不过是一种调试帮助,因为它没有显示在 UI 中)。

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

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

这样就不需要在每次设置控件文本时都使用 InvalidateRect。