筆者在開發項目時想在MDI程序中添加彩色位圖以美化界面,也實驗了幾種方法,但都有一些小問題,經多方查找資料,終於圓滿的實現了這種功能,現把我的實現方法介紹給大家。
首先要清楚對於一個MDI應用程序的主框架窗口來說包含一個特殊的子窗口稱為MDICLIENT窗口,應用程序的主框架類中有一個成員變量m_hWndMDIClient 指的就是MDICLIENT窗口。MDICLIENT窗口負責管理主框架窗口的客戶區,對MDI客戶窗口編程有一定的難度。原因是MDIFrameWnd的客戶區完全被MDICLIENT窗口覆蓋掉了。這樣,MDI主窗口類MDIFrameWnd的背景色和光標都不起作用。同時,微軟並不支持將MDICLIENT窗口作為子類,MDICLIENT窗口只能使用標准的背景色和光標。所以,對MDI客戶窗口編程不能象對普通窗口那樣簡單地重載WM_PAINT的消息處理函數。我們可以在主框架窗口截獲關於MDICLIENT窗口的重畫消息,然後加入自己設計的代碼。我用PreTranslateMessage(MSG* pMsg) 截獲MDI客戶窗口WM_PAINT消息,在這個函數中向主框架窗口發送WM_PAINT消息,在該消息的處理函數中實現彩色位圖的顯示。我的具體實現如下:1、向程序添加256色彩色位圖資源,命名為IDB_BITMAP1;2、用ClassWizard向主框架類添加函數CMainFrame::PreTranslateMessage(MSG* pMsg);3、用ClassWizard向主框架類添加函數CMainFrame::OnPaint();現給出兩個函數的實現:
按上述步驟就可以實現在MDI程序中顯示彩色位圖了,我舉的例子用的是256色位圖,你也可以實現真彩色位圖的顯示,具體方法我就不多說了,有興趣的朋友可以試一試。