首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

變更 MDI 用戶端視窗背景的完整實作指南

     編輯:VC 教學

前言

在《深入 MDI 用戶端視窗程式設計》一文中,胡擊先生分享了兩種修改 MDI 用戶端視窗背景的方法並給出了範例碼。本文在致敬作者鑽研精神的同時,提供另一種基於 VC6.0/5.0 MSDN 文件的標準實作方式,供開發者參考交流。

Windows 背景重繪標準機制

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 主視窗用戶區背景的步驟

要改變 MDI 主視窗的用戶區背景,必須先將 MDI 用戶端子視窗進行子類化,再處理其 WM_ERASEBKGND 訊息。具體步驟如下:

  1. 使用 ClassWizard 建立一個繼承自 CWnd 的視窗類別,命名為 CNewClientWnd。
  2. 在 CMainFrame 中加入 CNewClientWnd 型別的成員變數 m_wndNewClient。
  3. 在 CMainFrame::OnCreate 中,於呼叫基類 CMDIFrameWnd::OnCreate() 之後,加入子類化程式碼:
if (!m_wndNewClient.SubclassWindow(m_hWndMDIClient))
{
    TRACE("Failed to subclass MDI client window\n");
    return -1; // 建立失敗
}

m_hWndMDIClient 是 CMDIFrameWnd 的成員變數,保存 MDI 用戶端視窗的控制代碼(注意:此變數在 MSDN 說明中可能找不到)。

  1. 在第一步建立的 CNewClientWnd 類別中,使用前述範例碼處理 WM_ERASEBKGND 訊息即可完成自定義背景繪製。

結語

此法遵循 Windows 標準訊息處理機制,結構清晰,易於維護擴展,是修改 MDI 用戶端視窗背景的推薦做法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved