2015-10-16 33 views
0

给定一个派生自CEdit的类,是否可以拦截WM_PAINT消息,用不同的CDC调用基类消息?将WM_PAINT重定向到默认处理程序,替换DC?

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

像这样编辑控件修补不起作用,它提交了一个严重的犯罪和油漆,而不使用WM_PAINT。 –

+0

这不是真正的修补。我只是想让它绘制到我更新的DC,因为它使用WM_PRINT或WM_PRINTCLIENT。 – Robinson

回答

2

目标HDC没有通过WM_PAINT消息本身,它从BeginPaint()获得。你无法控制它返回哪个HDC

正确的方式问一个HWND将自己描绘到一个特定的HDC是使用PrintWindow()功能,或直接发送一个WM_PRINT消息。

+0

是的,我正在使用WM_PRINTCLIENT来呈现分层窗口及其子项。麻烦的是,例如,如果我尝试将编辑框添加到分层窗口中,它不是交互式的。我可以从中得到消息,但我不认为它正在重绘自己。如果有任何孩子需要重绘,我需要以某种方式戳住父层分层窗口来刷新自己。 – Robinson