如何使用纯非托管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();
但是,此代码将为没有输出。帮助?!
最佳答案
在“输出”窗口中查看,并观察0xc0000005(AccessViolation异常)的第一次机会异常通知。 Wow64仿真器中有一个后台程序,可以在分派(dispatch)WM_CREATE时吞下异常。
异常是由于未完全初始化OPENFILENAMEA结构引起的。快速解决:
OPENFILENAMEA ofn = {0};
并且最好在调用ShowWindow()而不是WM_CREATE消息处理程序之前显示对话框。