VISUAL C++6.0在MDI主架構視窗中添加位元影像

來源:互聯網
上載者:User

筆者在開發項目時想在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();現給出兩個函數的實現:

 

BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
 // TODO: Add your specialized code here and/or call the base class
 if(pMsg->hwnd==m_hWndMDIClient && pMsg->message==WM_PAINT)
  PostMessage(WM_PAINT);
  return CMDIFrameWnd::PreTranslateMessage(pMsg);
 }

 void CMainFrame::OnPaint()
 {
  CDC dc, memdc;
  dc.m_hDC=::GetDC(this->m_hWndMDIClient);
  CRect rect;
  CBitmap bitmap;
  BITMAP szbitmap;
  bitmap.LoadBitmap(IDB_BITMAP1);
  bitmap.GetObject(sizeof(BITMAP),&szbitmap);
  CSize size(szbitmap.bmWidth,szbitmap.bmHeight);
  memdc.CreateCompatibleDC(&dc);
  CBitmap *oldbitmap=memdc.SelectObject(&bitmap);
  GetClientRect(&rect);
  StretchBlt(dc.m_hDC,0,0,rect.Width(),rect.Height(),
       memdc.m_hDC,0,0,size.cx,size.cy,SRCCOPY);
  memdc.SelectObject(oldbitmap);
  memdc.DeleteDC();
  dc.DeleteDC();
  CMDIFrameWnd::OnPaint();
 }


  按上述步驟就可以實現在MDI程式中顯示彩色位元影像了,我舉的例子用的是256色位元影像,你也可以實現真彩色位元影像的顯示,具體方法我就不多說了,有興趣的朋友可以試一試。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.