【问题标题】:Open file dialog with filter使用过滤器打开文件对话框
【发布时间】:2013-01-16 23:12:41
【问题描述】:

我正在使用 C++ 和 MFC。我需要修改打开文件对话框,所以只有 folders 包含 *.txt 文件必须可见。有任何想法吗?

【问题讨论】:

  • 可能是文件打开对话框 HOS 的新候选者。 ronaldbieber.de/Interface_Hall_of_Shame/file_dialog.html
  • @selbie:该链接充满了不知情的意见,甚至都不好笑。不过,我同意你的观点,最初的问题是要求实现一个没有任何可用性考虑的功能。所以奥列格,现在就停在那里。请。
  • @Tim,谢天谢地,我认为标准文件对话框不可能。

标签: c++ windows mfc


【解决方案1】:

我没有任何使用 MFC 编程的经验,但这些是我的疑问。

没有理由这样做,特别是如果您要过滤所有可能级别的文件夹。想象一下用户打开C:,你的程序开始扫描整个磁盘。如果这个磁盘是通过网络连接的,那就更糟糕了。

这就是为什么我怀疑 MFC 中是否有这种能力的原因,所以你必须编写这样一个对话框,并且只有当你决定只使用一些固定级别的嵌套来过滤文件夹时才有可能。

【讨论】:

    【解决方案2】:

    使用GetOpenFileName 并适当设置OPENFILENAME 结构实例的过滤器成员。

    char szFile[MAX_PATH];
    
    OPENFILENAME ofn = {0};
    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = m_hWnd;
    ofn.lpstrFile = szFile;
    ofn.lpstrFile[0] = '\0';
    ofn.nMaxFile = sizeof(szFile);
    ofn.lpstrFilter = "Text\0*.TXT\0";
    ofn.nFilterIndex = 0;
    ofn.lpstrFileTitle = NULL;
    ofn.nMaxFileTitle = 0;
    ofn.lpstrInitialDir = NULL;
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
    
    if (GetOpenFileName(&ofn)) ...
    

    【讨论】:

    • 过滤器只适用于当前选择的目录。它不会根据目录的内容过滤目录。因此,它没有解决问题。
    猜你喜欢
    • 2015-12-28
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 2011-10-02
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多