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

Winapi 将WM_PAINT重定向到默认处理程序,替换DC?,winapi,atl,wtl,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 O

给定一个从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;
        }
    };
class-CEditNew:public-CWindowImpl
{
公众:
开始消息映射(CEditNew)
消息处理程序(WM\U PAINT、OnPaint)
END_MSG_MAP()
LRESULT OnPaint(UINT、WPARAM、LPARAM、BOOL和)
{           
返回0;
}
};
我可以通过调用SubclassWindow来拦截CEdit的WM_绘制,但我真的很想调用基类原始绘制处理程序


对于上下文,父窗口有它自己的兼容dc(它使用半透明),我需要允许子控件在需要时通过给它们这个dc来绘制自己。

目标
HDC
不会在
WM_paint
消息本身中传递,它是从
BeginPaint()
获得的。您无法控制它返回哪个
HDC


要求
HWND
将自身绘制到特定的
HDC
的正确方法是使用该函数,或直接向其发送消息。

像这样修补编辑控件是不起作用的,它犯了严重的罪行,在不使用WM_paint的情况下进行绘制。这不是真正的修补。我只想让它绘制到我更新时给它的DC,就像我使用WM_PRINT或WM_PRINTCLIENT一样。是的,我正在使用WM_PRINTCLIENT渲染分层窗口及其子窗口。问题是,例如,如果我试图在分层窗口中添加一个编辑框,它就不是交互式的。我可以从它那里得到信息,但我不认为它在重新粉刷自己。如果有孩子需要重新绘制,我需要用某种方式戳一下父层窗口来刷新自己。