c++ - 在没有 MFC 的 win32 中保存/打开通用对话框

标签 c++ file winapi dialog

如何使用纯非托管 Win32 API 创建默认的保存/打开对话框? 按照指南 here ,以下代码在WM_CREATE时执行消息在主窗口的消息循环中处理: 我included <Commdlg.h>还有。

            OPENFILENAMEA ofn;
        char Buffer[300];
        fill(Buffer, Buffer + 300, '\0');
        ofn.lStructSize = sizeof(OPENFILENAMEA);
        ofn.hwndOwner = hWnd;
        ofn.lpstrFile = Buffer;
        ofn.nMaxFile = 300;
        ofn.Flags = OFN_EXPLORER;
        ofn.lpstrFilter = NULL;
        ofn.lpstrCustomFilter = NULL;
        ofn.nFilterIndex = 0;
        ofn.lpstrFileTitle = NULL;
        ofn.lpstrInitialDir = NULL;
        ofn.lpstrTitle = NULL;
        out << GetOpenFileNameA(&ofn) << endl;
        out << Buffer << (int)CommDlgExtendedError();

但是,这段代码给出了任何NO 输出。帮忙?!

最佳答案

the following code is executed when WM_CREATE message is handled

查看“输出”窗口并观察 0xc0000005 的第一次机会异常通知,这是一个 AccessViolation 异常。 Wow64 模拟器中有一个逆止器,它在调度 WM_CREATE 时吞下异常。

异常是由于没有完全初始化OPENFILENAMEA结构引起的。快速修复:

 OPENFILENAMEA ofn = {0};

并倾向于在调用 ShowWindow() 而不是 WM_CREATE 消息处理程序之前显示对话框。

关于c++ - 在没有 MFC 的 win32 中保存/打开通用对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7729693/

相关文章:

c++ - 你如何找到你的 linux 机器上安装了哪个版本的 libstdc++ 库?

c++ - G++未定义对类::函数的引用

c++ - 没有私有(private)成员的类声明

c - 如何使用 MinGW 创建微型 PE (Win32) 可执行文件

c++ - 以编程方式设置 Qt 工具提示区域约束?

c - Unix 系统中的文件 read() 函数

python - 谷歌浏览器下载文件时如何自动重命名文件?

java - 解析 XML 截断文件路径

C# Windows 程序退出请求(检测 Application.Exit)无表单

c++ - 为什么我的程序会在拥有线程的情况下生成 LdrpLoaderLock 死锁?