• CFileDialog文件类型过滤问题


    CFileDialog文件类型过滤问题

    问题描述:

      用CFileDialog实例化一个对象后,其中的文件过滤功能不起作用,而且还会在过滤的框内显示乱码。

    参考代码:

      正确代码如下:

       static TCHAR BASED_CODE szFilter[] = _T("Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|WordFile (*.doc;*.docx)|*.doc; *.docx|All Files (*.*)|*.*||");
       CFileDialog dlgFile(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT, (LPCTSTR)szFilter);
       dlgFile.DoModal();

      错误代码如下:

       static char BASED_CODE szFilter[] = _T("Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|WordFile (*.doc;*.docx)|*.doc; *.docx|All Files (*.*)|*.*||");
       CFileDialog dlgFile(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT, (LPCTSTR)szFilter);
       dlgFile.DoModal();

    导致问题的原因:

      定义的字符串类型不对,szFilter的类型应该定义为TCHAR。

    备注:

      另外一种实现相同功能的方式,在实例化CFileDialog的对象后,直接修改CFileDialog的属性,代码如下:

       static TCHAR BASED_CODE szFilter[] = _T("Chart Files (*.xlc)\0*.xlc\0Worksheet Files (*.xls)\0*.xls\0Data Files (*.xlc;*.xls)\0*.xlc; *.xls\0WordFile (*.doc;*.docx)\0*.doc; *.docx\0All Files (*.*)\0*.*\0\0");
       CFileDialog dlgFile(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT, NULL);
       dlgFile.GetOFN().lpstrFilter = szFilter;
       dlgFile.DoModal();

      注意:当用这种方式设定时,szFilter中的"|"需要全部替换为"\0"。

  • 相关阅读:
    二进制中1的个数
    原码、反码、补码,计算机中负数的表示
    win10安装MySQL
    X86、X64、X86_64
    windows搭建深度学习环境
    驱动
    cpu、gpu
    常见的文件系统
    UltralSO制作U盘启动盘
    save、load
  • 原文地址:https://www.cnblogs.com/shengye/p/CFileDialog.html
Copyright © 2020-2023  润新知