2015-10-16 95 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