将 WM_PAINT 重定向到默认处理程序,替换 DC?
Redirect a WM_PAINT to default handler, replacing the DC?
给定从 CEdit 派生的 class,是否可以拦截 WM_PAINT 消息,使用不同的 CDC 调用基础 class 消息?
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,但我真的很想调用基础 class 原始绘制处理程序。
对于上下文,父级 window 有自己的 compatibledc(它使用半透明),我需要允许子控件在需要时通过给他们这个 dc 来绘制自己。
目标 HDC
不是在 WM_PAINT
消息本身中传递的,它是从 BeginPaint()
中获得的。您无法控制 HDC
它 returns。
要求 HWND
将自己绘制到特定 HDC
的正确方法是直接使用 PrintWindow()
function, or send it a WM_PRINT
消息。
给定从 CEdit 派生的 class,是否可以拦截 WM_PAINT 消息,使用不同的 CDC 调用基础 class 消息?
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,但我真的很想调用基础 class 原始绘制处理程序。
对于上下文,父级 window 有自己的 compatibledc(它使用半透明),我需要允许子控件在需要时通过给他们这个 dc 来绘制自己。
目标 HDC
不是在 WM_PAINT
消息本身中传递的,它是从 BeginPaint()
中获得的。您无法控制 HDC
它 returns。
要求 HWND
将自己绘制到特定 HDC
的正确方法是直接使用 PrintWindow()
function, or send it a WM_PRINT
消息。