【问题标题】:Win32 C++ Subclassed label not receiving WM_PAINT after calling WM_SETTEXTWin32 C++ 子类标签在调用 WM_SETTEXT 后未收到 WM_PAINT
【发布时间】:2017-12-23 19:05:01
【问题描述】:

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

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

我假设在调用 WM_SETTEXT 之后调用 InvalidateRect 是可行的方法?

如果您想查看代码,请告诉我。我觉得这个问题没有必要,这就是我最初忽略它的原因。

【问题讨论】:

  • 哪个消息接收窗口不依赖于它的windows过程地址(因此是否对其进行子分类)

标签: c++ winapi paint subclassing


【解决方案1】:

是否发送 WM_PAINT 以响应 WM_SETTEXT 取决于已对哪个窗口类进行了子类化,例如按钮无效但列表框不会(列表框的窗口文本只不过是调试辅助工具而已未显示在 UI 中)。

如果你的类设置文本应该无效,你总是可以在你的子类的 WindowProc 中添加如下内容:

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

这样你就不需要每次设置控件文本时都有一个 InvalidateRect。

【讨论】:

  • 谢谢。我觉得这真的很奇怪。但我想我将不得不接受它。顺便问一下,为什么叫“CallWindowProc(lpfnParent, hWnd, WM_SETTEXT, wParam, lParam);”?
猜你喜欢
  • 1970-01-01
  • 2011-05-29
  • 2018-12-04
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多