主题:重载通用文件对话框 发信人: skyice() 整理人: softlag(2000-06-14 11:17:35), 站内信件 步骤: 1.创建新的通用文件对话框类 注意 如果用户不希望为文件对话框增加自己的控件,便不需要创建新的类, 因此可以略过这一部分。 使用ClassWizard从CFileDialog中派生新的类。 用Dialog Editor创建一个小的对话框模板,模板中仅包括用户希望添 加到通用文件对话框上的控件。该通用对话框将自动创建对话框中可见的其 余标准控件,因此用户不必担心它们,只需创建新的控件即可。模板应该具 有一个不带框架的子窗口风格。 用ClassWizard为新的控件添加消息处理函数,为了访问由文件对话框 自动添加的控件,可以用GetDlgItem()函数和下面任一个ID号,ID与控件 匹配关系在以后的windows版本中可能会改变: psh1-12 // push buttons chx1-12 // checkboxes rad1-12 // radio buttons grp1-12 // group boxes stc1-12 // statics lst1-12 // listboxes/views cmb1-12 // comboboxes edt1-12 // edit boxes scr1-12 // scrollbars 2.初始化通用文件对话框类 为使用CFileDialog对话框类或自己的派生类,首先构造通用文件对话 框类如下: CWzdFileDialog dlg( TRUE, _T(".log"), "", OFN_ALLOWMULTISELECT| OFN_ENABLETEMPLATE | 0, "Accounting Files (*.log;*.txt)|*.log;" "*.txt|All Files (*.*)|*.*||", NULL); 如果要在对话框中添加自己的控件,那么也必须定义文件对话框打开时 的对话框模板,代码如下: dlg.m_ofn.lpTemplateName=MAKEINTRESOURCE(IDD_WZD_FILEOPEN); 当构造上面的类时,必须设置OFN_ENABLETEMPLATE标志。 用下面的代码使通用文件对话框在开始时使用一个特定目录: char lpszInitDir[]={"c:\\temp"}; dlg.m_ofn.lpstrInitialDir=lpszInitDir; 用下面的代码将文件对话框命名为Open或Save File As: char lpszTitle[]={"Open Wzd File"}; dlg.m_ofn.lpstrTitle=lpszTitle; 为设置一个在文件对话框关闭后仍然保留的文件过滤器,首先设置一个 如下所示的静态字符串: static char lpstrCustomFilter[255]={"Previous Filter\0*.log\0"}; 然后用它的地址初始化文件对话框,如下所示: dlg.m_ofn.lpstrCustomFilter=lpstrCustomFilter; dlg.m_ofn.nMaxCustFilter=255; 3.创建通用文件对话框和检索值 用CfileDialog::DoModal()函数打开一个文件对话框,然后检查用户 是否已经单击IDOK,如果是,则从对话框中获得该值: if (dlg.DoModal()==IDOK) { 检索用户选择的文件名,这可以使用下面任何一个函数: CString path=dlg.GetPathName(); //ex: c:\temp\temp.tmp CString file=dlg.GetFileName(); //ex: temp.tmp CString title=dlg.GetFileTitle(); //ex: temp CString ext=dlg.GetFileExt(); //ex: tmp 可以用下面的代码确定用户选择了哪一个文件过滤器: int nFilterIndex=dlg.m_ofn.nFilterIndex; 该过滤器作为索引返回到各种可能的文件过滤器列表中。 为了获得只读(Read Only)复选框的状态,可以用下面的代码: BOOL bReadOnly = dlg.GetReadOnlyPref(); 如果用户选择了多个文件(在上面设置了OFN一ALLOWMULT1SELECT), 那么可以用下面的代码翻动它们: for (POSITION pos=dlg.GetStartPosition();pos;) { CString pathx=dlg.GetNextPathName(pos); } 注意,当选择多个文件时,必须分析文件名以获得文件的标题和扩展名 等等。 另外,尽量不要使用CFileDialog提供的Help,用户应该通过添加和运 行Help来得到更好的使用效果。 -- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.99.90.56]