對"深入MDI客戶視窗編程"一文的改進和補充 英業達集團電子技術有限公司 向海 ---- 看了貴報刊載的"深入MDI客戶視窗編程"一文,頗有興趣,實際操作了一次,覺得很不錯 整個視窗一(略)所示: ---- 不過,美中不足的是,當我用滑鼠拖動MDI子視窗時,出現了圖二(略)所示情況: ---- 背景怎麽給抹掉了?但當我把整個架構視窗最小化,再還原它的時候,客戶視窗 的背景又恢複正常了,怎麽會是這個樣子呢? 是VC6.0/5.0出錯了嗎?不是的, 這是由於我們在拖動MDI子視窗時,客戶視窗沒有及時重繪的結果 那麽,該怎樣 去修正呢?當用滑鼠拖動子視窗時,我們應該讓當前活動子視窗給主架構視窗發 一個重繪客戶視窗背景的訊息,使用ClassWard在CChildFrame中加入OnMove訊息 處理函數如下: void CChildFrame::OnMove(int x, int y) {CMDIChildWnd::OnMove(x, y); //新增代碼 beginCMDIFrameWnd* p_MFrame=GetMDIFrame( ); P_MFrame- >PostMessage(WM_PAINT) ; //新增代碼 end}---- 再編譯、運行,剛才的現象沒有啦,一切都好了,無論怎麽拖動MDI子視窗,背景都不會有給抹掉的現象了。 ---- 可是,又有問題了,當我把滑鼠放在MDI子視窗的邊框上,並拖動邊框縮小MDI子視窗的尺寸時,出現了圖三所示情況: ---- 同樣的道理,當MDI子視窗的尺寸改變時,我們也得向主架構視窗發一條重繪背景的訊息 使用ClassWard在CChildFrame中加入OnSize訊息處理函數如下: void CChildFrame::OnSize(UINT nType, int cx, int cy) {CMDIChildWnd::OnSize(nType, cx, cy);//新增代碼 beginCMDIFrameWnd* p_MFrame=GetMDIFrame( ); P_ MFrame - >PostMessage(WM_PAINT) ; //新增代碼 end}---- 再編譯、運行,全正常了。 |