【问题标题】:c++ how to initialize open file dialog (GetOpenFileName)c++如何初始化打开文件对话框(GetOpenFileName)
【发布时间】:2013-07-19 18:32:07
【问题描述】:

我的代码如下。

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

问题:做什么?

【问题讨论】:

  • 关于您的实现的几点说明:您使用的是OPENFILENAMEA,但调用的是GetOpenFileName(与GetOpenFileNameA 相比)。保持一致,并且由于您使用的是非 ASCII 字符,因此您不妨对两者都使用 UNICODE 版本(尾随 W)。 lpstrFilter 的字符串文字有一个多余的 NUL 终止符。字符串文字已经以零结尾,即"\0" 表示字符数组{ '\0', '\0' }
  • 谢谢!但是,感谢我们心爱的编译器,我已经注意到了其中的一些错误。

标签: c++ c winapi mingw


【解决方案1】:

试试这个:

BOOL selected = GetOpenFileName(&open);

我不熟悉 WinAPI,但请查看错误消息:

错误:无法将参数 '1' 的 'OPENFILENAME {aka tagOFNA}' 转换为 'LPOPENFILENAMEA {aka tagOFNA*}' 到 'BOOL GetOpenFileNameA(LPOPENFILENAMEA)'

意味着您应该将指向OPENFILENAME 的指针作为参数传递给GetOpenFileName

错误:请求从“BOOL {aka int}”转换为非标量类型“OPENFILENAME {aka tagOFNA}”

表示GetOpenFileName的返回类型应该是BOOL

【讨论】:

    【解决方案2】:

    GetOpenFileName 返回 BOOL,而不是 OPENFILENAME

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

    如果它返回 true,它将修改您的 open 的内容以反映用户选择的内容。

    所以,你通常会这样使用它:

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

    【讨论】:

    • f**k。这是我感到非常愚蠢的时刻之一。谢谢!
    • @19greg96:编译器的主要功能是让我们尽可能多地感觉自己像个白痴。 :-)
    猜你喜欢
    • 1970-01-01
    • 2018-03-22
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多