我的代码如下。

OPENFILENAMEA open;
ZeroMemory(&open, sizeof(open));

open.lStructSize = sizeof(LPOPENFILENAMEA);
open.lpstrFilter = "Képek\0*.jpg;*.jpeg;*.gif;*.png;*.bmp\0\0";
open.nFileOffset = 1;
open.lpstrFile[0] = '\0';
open.nMaxFile = 2048;
open.lpstrTitle = "Képek kiválasztása..";
open.Flags = OFN_ALLOWMULTISELECT | OFN_FILEMUSTEXIST;

OPENFILENAME selected = GetOpenFileName(open);

我的问题是,尝试构建时出现以下错误:
调用error: cannot convert 'OPENFILENAME {aka tagOFNA}' to 'LPOPENFILENAMEA {aka tagOFNA*}' for argument '1' to 'BOOL GetOpenFileNameA(LPOPENFILENAMEA)'时的GetOpenFileName
如果我用open参数作为ptr GetOpenFileName(&open)调用它,则会得到以下error: conversion from 'BOOL {aka int}' to non-scalar type 'OPENFILENAME {aka tagOFNA}' requested
问题:怎么办?

最佳答案

GetOpenFileName返回BOOL,而不是OPENFILENAME

如果用户选择文件并单击“确定”,则它将返回非零值。如果他们单击“取消”,它将返回0。

如果返回true,它将修改open的内容以反射(reflect)用户选择的内容。

因此,您通常使用类似以下内容的代码:

if (GetOpenFileName(&open)) {
    // use open.whatever to get data about the selected file
}
else
   // The user clicked cancel -- typically do nothing.

关于c++ - C++如何初始化打开文件对话框(GetOpenFileName),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17763592/

10-11 21:46