我们通常在设计中会用到一些控件,但有时控件太多,就会影响界面的美观、简洁,因此,会使用一些属性窗,较多做法是使用基于CPropertyPage和CPropertySheet属性页来创建,再通过DoModal()打开,但其为模态对话框,使用起来不太灵活,还因一些自带的控件影响美观等。本篇基于对话框类自制属性窗:
1) 资源视图->Dialog->添加资源->新建,添加控件并调整布局;
2) 项目->类向导->添加类(MFC类),填写类名(如:CCtrlSetDlg),基类选择CDialog,对话框选择新建对话框的ID号;
3) 主对话框的.h文件中包含新对话框的.h头文件,并添加代码:
CCtrlSetDlg*m_CtrlSetDlg; //子对话框变量
BOOLCreateCtrlSetDlg(); //子对话框创建函数
BOOL isCtrlOn= false;
4) 添加子对话框创建函数CreateCtrlSetDlg()代码:
if(m_CtrlSetDlg == NULL){
m_CtrlSetDlg =new CCtrlSetDlg;
m_CtrlSetDlg->Create((LPCTSTR)CCtrlSetDlg::IDD,this);
if(m_CtrlSetDlg == NULL)
return false;
//调整子对话框位置
CRectrectParent;
CRect rect;
GetWindowRect(&rectParent);
rect.top =rectParent.top;
rect.left =rectParent.right - 6;
rect.bottom =rectParent.top + 570;
rect.right =rect.left + 220;
m_CtrlSetDlg->MoveWindow(&rect,TRUE);
return true;
}
else{
return true;
}
5) 添加控制按钮及响应函数代码:
if (CreateCtrlSetDlg()){
if (isCtrlOn){
isCtrlOn = false;
m_CtrlSetDlg->ShowWindow(SW_HIDE); //隐藏对话框
m_btnCtrl.SetWindowTextW(L"CTRL>>");
}
else{
isCtrlOn = true;
m_CtrlSetDlg->ShowWindow(SW_SHOW); //显示对话框
m_btnCtrl.SetWindowTextW(L"CTRL<<");
}
}
6) 添加OnClose()函数并添加代码:
deletem_CtrlSetDlg;
7)实现效果:点击按钮显示/隐藏子对话框。