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

时间:2013-08-31 17:41:09

标签: 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);
    }
}

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

1 个答案:

答案 0 :(得分:7)

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

  

当用户选择文件时,nFilterIndex返回当前显示的过滤器的索引。

如果您希望在发生更改时(即显示对话框时)了解更改,您必须设置挂钩程序并处理CDN_TYPECHANGE通知。