ダイアログの小さいアイコンの修正方法。

AppWizardで作ったのダイアログベースのアプリは
デフォルトでは左上の(小さい)アイコンが崩れているので修正します。


まずはメンバ変数を追加する。

class CKamereonDlg : public CDialog
{
      :
      :
protected:
    HICON m_hIcon;
    HICON m_hSmallIcon;  // 追加
      :
      :
};

コンストラクタで小さいアイコンのハンドルを取得。

CXXXDlg::CXXXDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CKamereonDlg::IDD, pParent)
{
      :
      :
    // メモ: LoadIcon は Win32 の DestroyIcon のサブシーケンスを要求しません。
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    // LoadImageで小さいアイコンのハンドルを取得。
    m_hSmallIcon = (HICON)::LoadImage(AfxGetInstanceHandle(),         //
                                      MAKEINTRESOURCE(IDR_MAINFRAME), //
                                      IMAGE_ICON,                     // 追加
                                      16,                             //
                                      16,                             //
                                      LR_DEFAULTCOLOR);               //
}


OnInitDialog()で小さいアイコンを設定。


BOOL CKamereonDlg::OnInitDialog()
{
      :
      :
    // ウィンドウがダイアログでない時は自動的に設定しません。
    SetIcon(m_hIcon, TRUE);                 // 大きいアイコンを設定
    SetIcon(m_hSmallIcon, FALSE);           // 小さいアイコンを設定  // 修正
      :
      :
}


OnPaint()の修正。


void CKamereonDlg::OnPaint() 
{
      :
      :
        // アイコンを描画します。
        dc.DrawIcon(x, y, m_hSmallIcon);  // 修正
      :
      :
}


OnQueryDragIcon()の修正。


HCURSOR CKamereonDlg::OnQueryDragIcon()
{
    return (HCURSOR) m_hSmallIcon;  // 修正
}

[ 戻る ]