MFC 9.0 FeaturePack - CDialogEx

FeaturePackでは、CDialogクラスを継承したCDialogExクラスが追加されている


だが、Wizardが生成するダイアログクラスのコードが以下のようになっている

class CxxxDlg : public CDialog
{
};


そこで、以下の箇所をCDialogからCDialogExに変更する必要がある

// xxxDlg.h
class CxxxDlg : public CDialogEx
{
};
// xxxDlg.cpp
CxxxDlg::CxxxDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CxxxDlg::IDD, pParent)
{
}


BEGIN_MESSAGE_MAP(CxxxDlg, CDialogEx)
    ...
END_MESSAGE_MAP()


BOOL CxxxDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();
}


これで準備はOKだ



本題に入ろう


CDialogExクラスで追加されたのは以下の3つのメンバ関数だ

// 背景色の設定
void SetBackgroundColor(COLORREF color, BOOL bRepaint=TRUE);

// 背景画像の設定
void SetBackgroundImage(HBITMAP hBitmap, BackgroundLocation location=BACKGR_TILE, BOOL bAutoDestroy=TRUE, BOOL bRepaint=TRUE);
BOOL SetBackgroundImage(UINT uiBmpResId, BackgroundLocation location=BACKGR_TILE, BOOL bRepaint=TRUE);


念のため使い方も書こう



背景色の設定はこうする

BOOL CxxxDlg::OnInitDialog()
{
    ...

    SetBackgroundColor(RGB(160, 255, 160));

    return TRUE;
}

とても簡単になった
(※残念ながらダイアログエディタのプロパティでは背景色を変更することはできない)




背景画像(リソース)の設定は以下のようにする

BOOL CxxxDlg::OnInitDialog()
{
    ...

    SetBackgroundImage(IDB_BITMAP1);

    return TRUE;
}


背景画像(ファイル)の設定は以下のようにする

// OnEraseBkgndをオーバーライドする
BOOL CxxxDlg::OnEraseBkgnd(CDC* pDC)
{
    CImage image;
    image.Load(_T("C:/Background.bmp"));

    SetBackgroundImage(image, BACKGR_TILE, TRUE, FALSE);

    return CDialogEx::OnEraseBkgnd(pDC);
}

とても残念だがダイアログエディタは何一つ変わっていない



※Wizardが生成するコードのCxxxAppの基本クラスはCWinAppExクラスになっている