发信人: 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]
  | 
 
 
 |