c - 是否有任何数据可以保存我在 WINAPI 中选择的过滤器 - OPENFILENAME

标签 c winapi

我只想知道用户选择了哪个过滤器。

void LoadFilePath(char *_szFilePath, int _nFilePathSize)
{
   if( !_szFilePath) return;
    if( _nFilePathSize < MAX_PATH ) return;

    OPENFILENAME ofn;
    char lpstrFile[MAX_PATH] = "";

    memset(&ofn, 0 ,sizeof(OPENFILENAME));
    ofn.lStructSize = sizeof(OPENFILENAME);
    ofn.hwndOwner = NULL;
    ofn.lpstrFilter = "VTX File(*.vtx)\0*.vtx\0";
    ofn.lpstrFile = lpstrFile;
    ofn.lpstrInitialDir = ".\\";
    ofn.Flags = OFN_NOCHANGEDIR;
    ofn.nMaxFile = MAX_PATH;

    if(GetOpenFileName(&ofn) != 0 ){
        sprintf(_szFilePath,"%s",ofn.lpstrFile);
    }
    if(ofn.lpstrFile[0] == 0 )
    {
        printf("no selected file \n");
        system("pause()");
            exit(0);
    }
}

打开文件资源管理器并将路径保存到第二个参数是简单的代码。 过滤器是 .vtx,但我尝试添加更多。然后我想要用户选择哪个过滤器。 有什么好方法吗?谢谢

最佳答案

OPENFILENAME结构包含一个字段nFilterIndex。当用户与对话框交互时,该字段会更新。文档的相关部分:

When the user selects a file, nFilterIndex returns the index of the currently displayed filter.

如果您想在更改发生时得到通知(即在显示对话框时),您必须设置一个 Hook 过程并处理 CDN_TYPECHANGE通知。

关于c - 是否有任何数据可以保存我在 WINAPI 中选择的过滤器 - OPENFILENAME,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18551021/

相关文章:

c - 不确定结构是否已经初始化

c - 为什么我的函数只破坏了一个字符数组?

Java - 使用 JNA 的 Windows 任务栏 - 如何将窗口图标 (HICON) 转换为 Java 图像?

c++ - 使用 GLFW 渲染和 WinAPI 处理消息

c# - 从 Windows 服务关闭显示

c++ - CreateEventW 意外失败

c - Windows 上的 UTC 时间戳

c - 除法结果始终为零

c++ - 直接合成,IDCompositionGaussianBlurEffect抛出访问冲突

c - 将数组值传递给另一个函数时出现缓冲区溢出问题