vir*_*raj 3 c++ winapi dialog file
如何使用纯非托管Win32 API创建deafault Save/Open对话框?按照此处的指南,WM_CREATE在主窗口的消息循环中处理消息时执行以下代码:Ive 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();
Run Code Online (Sandbox Code Playgroud)
但是,此代码无论如何都会产生NO输出.救命?!
处理WM_CREATE消息时执行以下代码
查看"输出"窗口,观察0xc0000005的第一次机会异常通知,即AccessViolation异常.Wow64模拟器中有一个支持,在调度WM_CREATE时会吞下异常.
异常是由于未完全初始化OPENFILENAMEA结构引起的.快速解决:
OPENFILENAMEA ofn = {0};
Run Code Online (Sandbox Code Playgroud)
并且在调用ShowWindow()而不是WM_CREATE消息处理程序之前支持显示对话框.