核心思想:
???????核心思想是定义一个画了颜色的基类对话框,让其他对话框类继承该基类,毫不费劲的得到对话框背景颜色的绘制, ????????实现整个项目拥有统一的配色。
关键一:
更改基类对话框背景颜色
1.
(1)基类中声明画刷CBrush m_brush;
(2)在基类构造函数创建画刷m_brush.createSolidBrush(RGB(255,125,125));
(3)重载afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor),WM_CTLCOLOR消息触发,表示即将重绘控件
{
if (nCtrlColor == CTLCOLOR_DLG)
{
return m_Brush;
}
}
关键二
自定义子对话框的父类(用VS自动添加Class的话,只能从CDlialogEx之类的继承)
2.
(1)创建基类CBaseColorDlg:CDialogEx,并删除基类的资源以及IDD
(2)修改基类的构造函数声明CBaseDlg(UINT nIdTemplate, CWnd* pParent = NULL);
※关键是添加了一个nIdTemplate参数,是对话框资源ID,可以将指定的对话框传给CDialogEx构造函数
(3)修改基类的构造函数实现
CColorBaseDlg::CColorBaseDlg(UINT nIdTemplate, CWnd* pParent )
: CDialogEx(nIdTemplate, pParent)
{
}
(4)用VS自动添加对话框类,继承自CDialogEx,最后将头文件和源文件所有的CDialogEx,
改成CColorBaseDlg,完成对话框父类的指定。
CDlgSub::CDlgSub(CWnd* pParent )
: CDialogEx(CDlgSub::IDD, pParent)
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
CDlgSub::CDlgSub(CWnd* pParent )
: CColorBaseDlg(CDlgSub::IDD, pParent)
|