- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将文件的扩展名过滤器应用于文件的选择对话框。
这种方式有效:
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";
但是当我通过参数动态分配扩展过滤器时,它失败了,过滤器没有出现在组合框中:
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();
我假设问题出在字符串转换中,但无法弄清楚。
最佳答案
这一行:
s << "(*.exe) Windows Executable\0" << "*." << filter << "\0";
正在传递以 null 结尾的 char*
字符串到 operator<<()
,因此在运行时实际上与这段代码表现相同:
s << "(*.exe) Windows Executable" << "*." << filter << "";
空值永远不会进入 s
.
要正确插入空值,您需要将它们分配给 stringstream
作为个人char
值而不是 char*
值(value)观:
s << "(*.exe) Windows Executable" << '\0' << "*." << filter << '\0';
此外,您正在进行类型转换 extFilter
是可疑的。如果您必须这样做才能消除编译器错误,那么 extFilter
不是兼容的数据类型,类型转换隐藏了代码中的错误。摆脱类型转换:
LPCSTR filter = extFilter; //Contains string "bmp"
如果代码无法编译,那么你做错了什么,需要正确修复它。
另一方面,如果extFilter
是一个空终止 char
字符串开头,在将其传递给 operator<<()
之前不需要将其分配给变量:
s << "(*.exe) Windows Executable" << '\0' << "*." << extFilter << '\0';
关于c++ - Winapi GetOpenFileName 扩展过滤器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34092427/
我使用带有 OPENFILENAME 结构的 GetOpenFileName,该结构使用 lpstrFilter 将文件过滤为 *.JPG。但是,在文件打开对话框中,对于文件名,用户可以输入 *.XL
我有以下代码,问题是,当我打印文件的完整路径名时,数组中每个字符之间有双空格。 // initialization outside any class in .c code OPENFILENAME
我想创建一个类似于使用 GetOpenFileDialog 创建的对话框。但是,我希望对话框显示程序提供的文件名列表,而这些文件名不一定作为文件存在于目录中。目的是为打开文件提供一个具有类似外观和感觉
我正在尝试这样调用 GetOpenFileName: int main(int argc, char* argv[]) { OPENFILENAME ofn; // common dial
所以我有这个简单的代码,因为我是 win32 的新手所以不要指望我写出非常困难的代码,但是,这是我的 winProc LRESULT CALLBACK WindowProcedure (HWND hw
我的代码如下。 OPENFILENAMEA open; ZeroMemory(&open, sizeof(open)); open.lStructSize = sizeof(LPOPENFILENAM
在我的应用程序中,我需要加载许 multimap 像。我真的会使用一个选项来选择最后打开的文件,所以我想知道最后选择的文件。文档说: QString fileName = QFileDialog::g
有点奇怪。好的,所以我正在使用 OGRE 游戏引擎,它有一个“SceneManager”类,可以在后台打开一些文件流。如果我在使用 GetOpenFileName() 之前使用这些流,这些流工作正常,
代码就像 dlg = PyQt4.QtGui.QFileDialog() self.filename = dlg.getOpenFileName() 当对话框 pop 时,我单击路径中带有汉字的文件。
所以我有这个代码: OPENFILENAME ofn; char file_name[100]; ZeroMemory(&ofn, sizeof(OPE
当我尝试向“打开文件”对话框添加一些自定义控件时遇到问题。我使用了如下所示的资源文件,但它不起作用。我认为某个地方有错误,但我无法纠正它。如何在“打开文件”对话框上显示自定义控件? 程序.c #inc
我知道 Microsoft 建议在 GetOpenFileName() 和 GetSaveFileName() 上使用通用项对话框,但我使用的是一些较旧的代码。 如何限制 GetOpenFileNam
我使用 GetOpenFilename()让用户选择一个文件。这是代码: wchar_t buffer[MAX_PATH] = { 0 }; OPENFILENAMEW open_filena
这是在 qtforum.org 上首次发布的问题我在哪里 got no answer : 我无法在控制台应用程序中隐藏使用过的“打开”对话框。以下是用于测试此行为的 main.cc 文件的内容: #i
我正在尝试将文件的扩展名过滤器应用于文件的选择对话框。 这种方式有效: ofn.lpstrFilter = "(*.exe) Windows Executable\0*.exe\0" "(*.in
GetOpenFileName (出于可疑原因)在显示对话框时更改应用程序的当前目录。这可以通过将 OFN_NOCHANGEDIR 指定为对话框初始化标志来在对话框关闭时重置: OFN_NOCHANG
首先,这是我的配置: VS2010/Debug/C++ Win32 Project/Vista Home Premium 通过窗口 (CreateWindow) 中的按钮 (CreateWindow)
我试过谷歌搜索,但人们似乎遇到了同样的问题:我们无法获得所选文件的列表。 这是一段简单的工作代码,与我使用的代码类似: OPENFILENAME ofn = { sizeof ofn }; wchar
我参与了命名空间外壳扩展(NSE)的开发,其中包含来自某些文件夹的文件列表。我在 Window Vista 上使用标志 OFN_ALLOWMULTISELECT 创建的打开文件对话框 (OFD) 有一
我正在使用 Win32 和 C++ 制作一个应用程序,该应用程序可以通过带有 GetOpenFileName 函数的对话框加载文件的内容。一切正常,除了当我关闭主窗口并且应用程序退出并将其打印到控制台
我是一名优秀的程序员,十分优秀!