本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。
サポート技術情報

[MSVC] MDI クライアントの背景色を変更する方法

文書番号: 402000

最終更新日: 2003/11/11


この資料は以下の製品について記述したものです。


概要

この資料は MFC で MDI のクライアント領域の背景色を変更する一つの方法を紹介
したものです。

詳細

MDI のクライアント領域は通常システムのデフォルトの背景色が使われています。こ れを変更するには MDI クライアントのウィンドウプロシジャーの OnEraceBkgnd で
背景色のブラシを変更します。MFC のフレームワークでは CMDIFrameWnd のメンバ
中に MDI クライアントのウィンドウハンドルを持っているのでこのハンドルから
作成されたサブクラスプロシジャーの OnEraceBkgnd で背景色のブラシを変更します。

  //mdicli.h
  class CMDIClient : public CWnd // MDI Client 用クラス
   // 通常クラスウィザードの「クラスの追加」で generic CWnd を使用して作成する
   // ことができる
  {
  ...
  protected:
      virtual WNDPROC* GetSuperWndProcAddr();
      afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  ...
  }
  // mdicli.cpp
  ////////////////////////////////////////////////////////////////////////////
  // CMDIClient メッセージ ハンドラ
  BOOL CMDIClient::OnEraseBkgnd(CDC* pDC)
  {
      CBrush newBrush;
      newBrush.CreateSolidBrush(RGB(128,128,128));
      // 変更する背景色のブラシを作成
      HBRUSH hOldBrush = (HBRUSH)SetClassWord(GetSafeHwnd(),
      GCW_HBRBACKGROUND,(WORD)(HBRUSH)newBrush.m_hObject);
      // 現在の背景色のブラシを変更
      BOOL ret = CWnd::OnEraseBkgnd(pDC);
      SetClassWord(GetSafeHwnd(),GCW_HBRBACKGROUND,(WORD)hOldBrush);
      // 以前の背景色のブラシに戻す
      newBrush.DeleteObject();
      return ret;
  }
  // デフォルトのウィンドウプロシジャーは NULL を返す
  WNDPROC* CMDIClient::GetSuperWndProcAddr()
  {
      static WNDPROC NEAR pfnSuper = NULL;
      return &pfnSuper;
  }
  // mainfrm.h
  #include "mdicli.h" // MDI client procedure のヘッダ
  class CMainFrame : public CMDIFrameWnd
  {
  ...
  protected:
      CMDIClient m_NewMDIClient; // MDI client のオブジェクト
  ...
  };
  // mainfrm.cpp
  int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  {
      if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
          return -1;
      if(!m_NewMDIClient.SubclassWindow(m_hWndMDIClient)){
          // MDI クライアントのサブクラスを作成
          // m_hWndMDIClient は MDI Client のウィンドウハンドルを示す
          // CMDIFrameWnd class のメンバ。
          TRACE("SubclassWindow failed.\n");
      }
      return 0;
  }

Keywords: KBHOWTO VC10 VC15 KB402000
Technology: kbAudDeveloper kbVCsearch

inserted by FC2 system