如何使用纯非托管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消息处理程序之前显示对话框。

10-08 02:12