如何使用纯非托管 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/