精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>WINDOWS界面设计>>重载通用文件对话框

主题:重载通用文件对话框
发信人: 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]

[关闭][返回]