讲非模态与通用对话框.ppt
文本预览下载声明
第15讲 非模态对话框与通用对话框 继续修改电话薄程序,能够实现双击树中人员节点项,通过调用非模态对话框显示电话号码和姓名等信息 。 本讲主要内容 1. 非模态对话框 2. 通用对话框 1. 非模态对话框 对话框有两种类型:模态对话框和非模态对话框,在本节之前所有程序中的对话框都是模态对话框,都是通过DoModal()函数显示的,其特点是在对话框关闭之前,用户不能对该对话框所在程序的其他窗口进行操作。 非模态对话框与之相反,当对话框尚未关闭时,用户仍然可以对该应用程序的其他窗口进行操作。 1. 非模态对话框 操作步骤: (1)打开Phone工程,在ClassWizard的Message Maps中为IDC_TREE添加NM_DBLCLK消息响应函数OnDblclkTree()。 1. 非模态对话框 (2)在ResourceView视图中,新建一个对话框,修改ID为IDD_SHOW_DIALOG,界面布局如下图所示,与CAddDlg和CModifyDlg类似。 1. 非模态对话框 (3)为对话框添加新类CShowDlg,并为两个文本编辑框分别添加CString类型的关联变量m_strName和m_strNumber。 1. 非模态对话框 (4)对CShowDlg添加SetValue()函数,其定义为: void CShowDlg::SetValue(CString name, CString number) { m_strName = name; m_strNumber = number; } 1. 非模态对话框 (5)重载OnCancel函数,并修改为: void CShowDlg ::OnCancel() { DestroyWindow(); } 1. 非模态对话框 (6)打开ClassWizard,在Message Maps中为CShowDlg添加PostNcDestroy消息响应函数,并修改为: void CShowDlg::PostNcDestroy() { CDialog::PostNcDestroy(); delete this; } 1. 非模态对话框 (7)完成CPhoneDlg::OnDblclkTree()函数: void CPhoneDlg::OnDblclkTree(NMHDR* pNMHDR, LRESULT* pResult) { //获得双击节点 HTREEITEM selItem = m_treePhone.GetSelectedItem(); if(selItem) { //获得节点名称和关联数据 CString name = m_treePhone.GetItemText(selItem); CString *number= (CString *)m_treePhone.GetItemData(selItem); //如果关联数据不为空,则是人员节点 if(number != NULL) { //非模态显示对话框 CShowDlg *pDlg = new CShowDlg(); pDlg-SetValue(name,*number); pDlg-Create(IDD_SHOW_DIALOG,this); pDlg-ShowWindow(SW_SHOW); } } *pResult = 0; } 1. 非模态对话框 (8)编译、链接、运行程序。 2. 通用对话框 Windows系统提供了一组标准用户界面的对话框,如文件对话框、颜色对话框和字体对话框等,这些被称为通用对话框。MFC为通用对话框提供了相应的类。 2. 通用对话框 1. CFileDialog类 CFileDialog类封装了文件打开和保存的对话框的功能,下图是一个标准的文件对话框,打开和保存文件共用同一对话框。 2. 通用对话框 文件对话框的创建过程与模态对话框类似:首先调用构造函数创建一个CFileDialog对象,然后调用DoModal()函数来显示对话框,当用户完成对话框的操作后自动关闭对话框并返回相应信息。 2. 通用对话框 【例8-4】 显示文件对话框 操作步骤: (1)新建工程FileDialog,删除系统自动生成的静态文本控件,将“确定”按钮的Caption修改为“文件对话框”。 2. 通用对话框 (2)添加OnOK响应函数,并在其中添加如下代码: void CFileDialogDlg::OnOK() { CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROM
显示全部