主题:重载通用文件对话框

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值