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

[MSVC] MFCを使ったコモンダイアログボックスのカスタマイズ

文書番号: 401872

最終更新日: 2003/11/12


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


概要

この資料は MFC を使ってファイルオープンのコモンダイアログボックスのカスタマイ ズをするサンプルです。MFC を使用しない方法は Windows SDK 3.1 プログラマー
ズリファレンス Vol 1. 「 4.6 コモンダイアログボックスのカスタマイズ」を
御参照下さい。

詳細

ファイルダイアログのカスタマイズをする最も簡単な方法は 次のような手順に
なります。
  1. CFileDialog の派生クラスをつくる。
  2. ダイアログのテンプレートを MSVC\SAMPLES\COMMDLG\FILEOPEN.DLG から自分の リソースのディレクトリにコピーし、.RC ファイルにそのファイルをインク ルードする。
  3. カスタムダイアログテンプレート用に dlgs.h をインクルードする。
  4. AppStudio で FILEOPENORD という名前のダイアログリソースをカスタマイズ の対象にする。
  5. カスタマイズ用のファイルダイアログを呼び出す前にテンプレートとインス タンスを設定し、テンプレートを可能にするフラグを設定する。
         例:
          m_ofn.lpTemplateName = MAKEINTRESOURCE(FILEOPENORD);
          m_ofn.hInstance = AfxGetInstanceHandle();
          m_ofn.Flags |= OFN_ENABLETEMPLATE;
    
次のコードは MFC を用いてファイルオープンダイアログの背景色とテキストをカス タマイズするクラスのサンプルです。CFileDialog からの派生クラスを作成します。
  // customdl.h : header file
  //
  #include "dlgs.h"   //Header file for common dialog resource
  /////////////////////////////////////////////////////////////////////////////
  // CCustomDlg dialog
  class CCustomDlg : public CFileDialog   //Create class from CFileDialog
  {
  // Construction
  public:
      CCustomDlg(BOOL dlgType, COLORREF bkColor,COLORREF txtColor,
          LPCSTR lpszDefExt = NULL,LPCSTR lpszFileName = NULL,
          DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
          LPCSTR lpszFilter = NULL, CWnd* pParentWnd = NULL);
          // standard constructor
  // Dialog Data
      //{{AFX_DATA(CCustomDlg)
      enum { IDD = FILEOPENORD }; //Customizing dialog box template ID
          // NOTE: the ClassWizard will add data members here
      //}}AFX_DATA
      CBrush m_pBkBrush;      //Brush object
      COLORREF textColor,backColor;
  // Overrides
      // ClassWizard generate virtual function overrides
      //{{AFX_VIRTUAL(CCustomDlg)
  protected:
      virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
      //}}AFX_VIRTUAL
  // Implementation
  protected:
      // Generated message map functions
      //{{AFX_MSG(CCustomDlg)
      afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
      //}}AFX_MSG
      DECLARE_MESSAGE_MAP()
  };
  // customdl.cpp : implementation file
  //
  #include "stdafx.h"
  #include "customdl.h"
  #ifdef _DEBUG
  #undef THIS_FILE
  static char BASED_CODE THIS_FILE[] = __FILE__;
  #endif
  /////////////////////////////////////////////////////////////////////////////
  // CCustomDlg dialog
  CCustomDlg::CCustomDlg(BOOL dlgType, COLORREF bkColor, COLORREF txtColor,
                          LPCSTR lpszDefExt,LPCSTR lpszFileName, DWORD dwFlags,
                          LPCSTR lpszFilter, CWnd* pParentWnd)
   : CFileDialog(dlgType,lpszDefExt,lpszFileName,dwFlags,lpszFilter,pParentWnd)
   ,m_pBkBrush(bkColor)    // Specifiy background brush
  {
    textColor = txtColor;
    backColor = bkColor;
    //{{AFX_DATA_INIT(CCustomDlg)
        // NOTE: the ClassWizard will add member initialization here
    //}}AFX_DATA_INIT
  }
  void CCustomDlg::DoDataExchange(CDataExchange* pDX)
  {
      CDialog::DoDataExchange(pDX);
      //{{AFX_DATA_MAP(CCustomDlg)
          // NOTE: the ClassWizard will add DDX and DDV calls here
      //}}AFX_DATA_MAP
  }
  BEGIN_MESSAGE_MAP(CCustomDlg, CFileDialog)
      //{{AFX_MSG_MAP(CCustomDlg)
      ON_WM_CTLCOLOR()
      //}}AFX_MSG_MAP
  END_MESSAGE_MAP()
  /////////////////////////////////////////////////////////////////////////////
  // CCustomDlg message handlers
  HBRUSH CCustomDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
  {
      switch (nCtlColor){
      case CTLCOLOR_STATIC:
          pDC->SetTextColor(textColor);
          pDC->SetBkColor(backColor);
          //Through
      case CTLCOLOR_DLG:
          return (HBRUSH)(m_pBkBrush.GetSafeHandle());
          //return brush which was specified as background
      }
      return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
  }
  // Calling Customized FileOpen Dialog function
  //
  void CMyWnd::OpenCustomizedDialog()
  {
      CCustomDlg dlg(TRUE,RGB(192,192,192),RGB(0,0,0));
      dlg.m_ofn.lpTemplateName = MAKEINTRESOURCE(FILEOPENORD);
      dlg.m_ofn.hInstance = AfxGetInstanceHandle();
      dlg.m_ofn.Flags |= OFN_ENABLETEMPLATE;
      if(dlg.DoModal() == IDCANCEL)
          return;
      //TO DO:
  }

詳細

  • Visual C++ は、米国 Microsoft Corporation の商標です。

Keywords: KBHOWTO VC10 KB401872
Technology: kbAudDeveloper kbVCsearch

inserted by FC2 system