调用 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。
子类控件在调用 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。