程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 改變MDI客戶窗口背景的方法

改變MDI客戶窗口背景的方法

編輯:關於VC++

在北京工業大學計算機學院 胡擊先生的“深入MDI客戶窗口編程”一文中談到了其在學習過程中摸索出的兩種改變MDI客戶窗口背景的方法,並具體描述了其中一種實現方法,同時給出了示例代碼。我對作者這種孜孜不卷的學習態度表示欽佩,並同時提出自己在遇到同樣的情況時所采取的解決方法。

希望能夠互相學習、交流。

其實,VC6.0/5.0在其MSDN Library中已經對修改MDI主窗口的客戶區背景提供了方法,並給出了示例。

先介紹一下Windows實現窗口背景刷新的標准方法,是通過處理WM_ERASEBKGND消息來實現的。下面的示范代碼顯示了它是怎麼做的。

  BOOL CSampleView::OnEraseBkgnd(CDC* pDC)
  {
    // 設置畫刷為希望的背景色
    CBrush backBrush(RGB(255, 128, 128));
    // 保存舊畫刷
    CBrush* pOldBrush = pDC- >SelectObject(&backBrush);
    CRect rect;
    pDC- >GetClipBox(&rect);
    // 擦除需要的區域
    // 用創建的畫刷繪制背景區域
    pDC- >PatBlt(rect.left, rect.top, rect.Width(), rect.Height(),
      PATCOPY);
    pDC- >SelectObject(pOldBrush);
    return TRUE;
  }

要改變MDI主窗口的客戶區背景,我們還需要做一些額外的工作:要先Subclass MDI主窗口的客戶區子窗口,然後再處理WM_ERASEBKGND消息。

我們可以通過執行以下步驟來示范如何修改MDI主窗口的客戶區背景:

1.用ClassWizard創建一個基類為CWnd的窗口類,可以命名為CNewClientWnd。

2.在CMainFrame中添加類型為上一步創建的窗口類CNewClientWnd的成員變量,可以命名為m_wndNewClient。 3.在CMainFrame的成員函數OnCreate中,對基類CMDIFrameWnd::OnCreate()的調用之後,添加一條對SubClassWindow()的調用語句。

if (!m_wndNewClient.SubclassWindow(m_hWndMDIClient))
    {
     TRACE("Failed to subclass MDI client window\n");
     return -1;   // fail to create
    }

m_hWndMDIClient是CMDIFrameWnd的成員變量,包含了MDI客戶窗口的句柄。

注意:(通過Help來查閱CMDIFrameWnd的成員變量,你是找不到m_hWndMDIClient的)

4.使用開始的示范代碼來處理第一步創建的窗口類CNewClientWnd的WM_ERASEBKGND消息。

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved