Last Updated 2004/06/28
Programming Tips Visual C++ MFC MDI  索 引 
MDI 親ウィンドウ背景色変更
2004/06/28

MDI 親ウィンドウの背景色を変更する.

クラスウィザードの「クラスの追加」にて CMDIClient(名前は例です)を作成する.
Class Type は generic CWnd とする.

MDIClient.h

class CMDIClient : public CWnd // MDI Client 用クラス
{

protected:
  virtual WNDPROC* GetSuperWndProcAddr();
  afx_msg BOOL OnEraseBkgnd(CDC* pDC);

};


MDIClient.cpp

BOOL CMDIClient::OnEraseBkgnd(CDC* pDC)
{
  CBrush nBrs;

  // 背景色のブラシを作成
  nBrs.CreateSolidBrush(RGB(192,192,192));

  // 現在の背景色のブラシを変更
  HBRUSH hOldBrs = (HBRUSH)SetClassWord(GetSafeHwnd(),
                   GCW_HBRBACKGROUND, (WORD)(HBRUSH)nBrs.m_hObject);

  BOOL status = CWnd::OnEraseBkgnd(pDC);

  // 背景色を以前のブラシに戻します
  SetClassWord(GetSafeHwnd(), GCW_HBRBACKGROUND, (WORD)hOldBrs);

  nBrs.DeleteObject();
  return status;
}


WNDPROC* CMDIClient::GetSuperWndProcAddr()
{
  static WNDPROC NEAR pfnSuper = NULL;

  return &pfnSuper;
}


MainFrm.h

#include "MDIClient.h"

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 クライアントのサブクラスを作成
    TRACE("SubclassWindow failed.\n");
  }

  return 0;
}


参照
MDI 親ウィンドウ背景に描画
SDI 背景色変更
FormView の背景色変更
前後のTips
MDI 親ウィンドウ背景色変更

DSS ProgrammingTipsCGI Ver2.01