将WM_PAINT重定向到默认处理程序,替换DC?

时间:2015-10-16 17:36:21

标签: winapi atl wtl

给定一个派生自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(它使用半透明),我需要允许子控件在需要时通过给它们直流来自己绘制。

1 个答案:

答案 0 :(得分:3)

目标HDC未在WM_PAINT消息本身中传递,而是从BeginPaint()获取。您无法控制它返回的HDC

要求HWND将自己绘制成特定HDC的正确方法是使用PrintWindow()函数,或直接向其发送WM_PRINT消息。