对话框
一、对话框分类:模态对话框、非模态对话框
对话框的概念:用户和应用程序之间交互的接口,接收用户的输入,输出应用程序相关数据。
模态对话框:打开以后用户无法进行其它操作,只有当对话框关闭以后才能进行其它操作。
非模态对话框:不用关闭对话框就可以进行其它操作。
创建对话框对象:在对一个对话框进行控制之前,必须先创建一个对话框对象。
模态对话框的显示:调用成员函数DoModal()。
非模态对话框的显示:1创建对象,2调用Create成员函数,3调用成员函数ShowWindow;如果对话框资源具有WS_VISIBLE属性,非模态对话框将自动显示,可不用调用ShowWindow函数。如:
CChatDlg *pDlg = new CChatDlg();
pDlg->Create(IDD_DIALOG1);
pDlg ->ShowWindow(SW_SHOW);
对话框的数据交换和显示:DDX(Dialog Data Exchange),通常在构造函数初始化数据成员的值,在对话框显示的时候自动显示这些值。
对话框的关闭:调用CDialog::OnOK()和CDialog::OnCancel()可以关闭一个对话框。
二、几种常见的模态通用对话框类: CFileDialog、CColorDialog、CFontDialog
1. 演示用CFileDialog类调用保存文件对话框。
2. 演示用CFileDialog类调用打开文件对话框。
三、对话框程序实例:
1. 建立一个单文档应用程序工程;
2. 插入一个对话框资源,并使用类向导为其创建一个新类CMyDialog
3. 以模态对话框方式调用:
为view类添加鼠标左键消息(或者某个菜单项消息,准备实现点击鼠标左键显示对话框),添加如下代码:
void CDlgTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CMyDialog dlg; // 模态对话框显示实例
if(dlg.DoModal() != IDOK) return;
CView::OnLButtonDown(nFlags, point);
}
4. 以非模态对话框方式调用:
为view类添加鼠标右键消息,使得按下鼠标右键时显示非模态对话框。
void CDlgTestView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CMyDialog *pDlg = new CMyDialog;
pDlg->Create(IDD_DIALOG1, this->GetDesktopWindow());
pDlg->ShowWindow(SW_SHOW);
CView::OnRButtonDown(nFlags, point);
}
5. 设置所有对话框颜色(不推荐使用):
在App成员函数InitInstance中添加如下代码:
SetDialogBkColor(RGB(0,0,255),RGB(255,0, 0)); //背景蓝色,控件颜色
设置某个对话框背景颜色之方法一:
void CModalDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
if (!IsIconic()) //窗口是否最小化
{
CRect rect;
GetClientRect(rect);
dc.FillSolidRect(rect, RGB(0, 255, 0)); //设置为绿色背景
}
//CDialog::OnPaint();
// Do not call CDialog::OnPaint() for painting messages
}
设置某个对话框背景颜色之方法二:
HBRUSH CModalLessDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
switch (nCtlColor)
{
case CTLCOLOR_DLG:
hbr = ::CreateSolidBrush(RGB(123, 234, 192));
break;
case CTLCOLOR_STATIC:
hbr = ::HBRUSH(GetStockObject(HOLLOW_BRUSH));
pDC->SetBkMode(TRANSPARENT);
break;
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
杂项:
GetDlgItem(IDC_EDIT_TREE)->SetFocus();
((CEdit *)GetDlgItem(IDC_EDIT_TREE))->SetSel(0, -1);
::SendMessage(GetDlgItem(IDC_EDIT_TREE)->GetSafeHwnd(),
WM_VSCROLL, SB_BOTTOM, NULL);
//::SendMessage(GetDlgItem(IDC_EDIT_TREE)->GetSafeHwnd(),
WM_KEYDOWN, VK_END, NULL);
static bool bSwitch = true;
bSwitch = !bSwitch;
if (bSwitch)
m_list.ModifyStyle(LVS_TYPEMASK, LVS_REPORT);
else
m_list.ModifyStyle(LVS_TYPEMASK, LVS_LIST);
this->SetDlgItemText(IDC_EDIT_USER, "123");
this->SetDlgItemText(IDC_EDIT_PSWD, "456");
6. 对话框数据交换:
a. 添加编辑框普通类型的变量
更多Java视频教程