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

[VC10] MFCを使ってダイアログボックスにアイコンを割り当てるには

文書番号: 401943

最終更新日: 2003/11/10


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


概要

この資料は MFC を使ってダイアログボックスにアイコンを割り当てる手順について
の一つの方法を紹介したものです。

詳細

ダイアログボックスにアイコン化ボタンを付けて、アイコン状態にしてもアイコンは 表示されません。ダイアログボックスをアイコン化する場合には、描画やドラッグの 処理などを自分で行う必要があります。
以下にサンプルコードの一部を示します。
  class CMyDlg : public CDialog
  {
  private:
          HICON hIcon;                    // アイコンのハンドル
  public:
          CMyDlg(CWnd* pParent = NULL);   // コンストラクタ
  protected:
          afx_msg void OnPaint();
          afx_msg BOOL OnEraseBkgnd(CDC* pDC);
          afx_msg HCURSOR OnQueryDragIcon();
          DECLARE_MESSAGE_MAP()
  };
  // メッセージマップ
  BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
          ON_WM_PAINT()
          ON_WM_ERASEBKGND()
          ON_WM_QUERYDRAGICON()
  END_MESSAGE_MAP()
  // コンストラクタ
  CMyDlg::CMyDlg(CWnd* pParent )
          : CDialog(CMyDlg::IDD, pParent)
  {
          // アイコンハンドルの取得
          hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);
  }
  // アイコンの描画
  void CMyDlg::OnPaint()
  {
          int OldMapMode;                 // マッピングモードの保持
          CPaintDC dc(this);
          // ダイアログがアイコン状態でなければ何もしない
          OldMapMode = dc.GetMapMode();
          dc.SetMapMode(MM_TEXT);
          if(!IsIconic())
                  return;
          // アイコンの背景を明示的に描画させる
          SendMessage(WM_ICONERASEBKGND, (UINT)(dc.m_hDC));
          // アイコンの描画
          dc.DrawIcon(0, 0, hIcon);
          dc.SetMapMode(OldMapMode);
  }
  // バックグラウンドの処理
  BOOL CMyDlg::OnEraseBkgnd(CDC* pDC)
  {
          // アイコン状態の時は0以外の値を返す
          if( IsIconic() )
                  return TRUE;
          else
                  return CDialog::OnEraseBkgnd(pDC);
  }
  // アイコンがドラッグされた時の処理
  HCURSOR CMyDlg::OnQueryDragIcon()
  {
          return hIcon; // アイコンハンドルを返す
  }

Keywords: KBHOWTO VC10 KB401943
Technology: kbAudDeveloper kbVCsearch

inserted by FC2 system