Winapi GetOpenFileName扩展过滤器不工作 [英] Winapi GetOpenFileName Extension Filter not working

查看:478
本文介绍了Winapi GetOpenFileName扩展过滤器不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试将文件的扩展过滤器应用于文件的选择对话框。

I'm trying to apply file's extension filters to the file's selection dialog.

这样工作:

ofn.lpstrFilter =   
"(*.exe) Windows Executable\0*.exe\0"
"(*.ini) Windows Initialization file \0*.ini\0"
"(*.dll) Dynamic Link Library \0*.dll\0"
"(*.lib) Windows Library file \0*.lib\0"
"(*.conf) Windows Configuration file \0*.conf\0";

但是当我通过参数动态分配扩展过滤器时,它失败,过滤器不会出现在组合框中:

But when I'm assigning extension filters dynamically, via parameters, it fails, filters don't appear in the combo box:

LPCSTR filter = (LPCSTR)extFilter; //Contains string "bmp"

stringstream s;
s << "(*.exe) Windows Executable\0" << "*." << filter << "\0";
string ffilter = s.str();
ofn.lpstrFilter = ffilter.c_str();

我假设问题是在字符串转换,但不能弄清楚。

I'm assuming the problem is in strings conversion, but can't figure it out.

推荐答案

发现了一个答案:

const char * extensionFilter = myParamVar; //Contains "JPG" string

string sFilter;
sFilter.append("Format: ");
sFilter.append(extensionFilter);
sFilter.push_back('\0');
sFilter.append("*.");
sFilter.append(extensionFilter);
sFilter.push_back('\0');

//Current filter content --> Format: JPG\0*.JPG\0

const char * filter = sFilter.c_str(); //Char string conversion
ofn.lpstrFilter = filter; //Set the filter to the sctructure's member.

//Opens the dialog and it successfully applies the filter.
if (GetOpenFileName(&ofn)==TRUE){
. . .

这篇关于Winapi GetOpenFileName扩展过滤器不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆