给定一个派生自CEdit的类,是否可以拦截WM_PAINT消息,使用不同的CDC调用基类消息?
class CEditNew : public CWindowImpl<CEditNew, CEdit>
{
public:
BEGIN_MSG_MAP(CEditNew)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
END_MSG_MAP()
LRESULT OnPaint(UINT, WPARAM, LPARAM, BOOL &)
{
return 0;
}
};
我可以通过调用SubclassWindow拦截CEdit的WM_PAINT,但我真的想调用基类原始绘制处理程序。
对于上下文,父窗口有自己的compatibledc(它使用半透明),我需要允许子控件在需要时通过给它们直流来自己绘制。
答案 0 :(得分:3)
目标HDC
未在WM_PAINT
消息本身中传递,而是从BeginPaint()
获取。您无法控制它返回的HDC
。
要求HWND
将自己绘制成特定HDC
的正确方法是使用PrintWindow()
函数,或直接向其发送WM_PRINT
消息。