将 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 消息。