«
使用win32 API打开文件对话框 会出现延迟返回的原因

时间:2022-9-9    作者:范文泉    分类:


使用win32 API进行打开文件对话框,使用GetOpenFileName用于返回用户打开的文件名称,后续进行文件读取处理。
但是使用这个函数打开文件过程中总是出现长时间延迟(偶尔会没有延迟,直接就返回文件名了)延迟时间达到了6-8s,已经严重影响了正常使用。代码如下:
OPENFILENAME ofn;
TCHAR szFile[MAX_PATH] = _T("");

        ZeroMemory(&ofn, sizeof(ofn));
        ofn.lStructSize = sizeof(ofn);
        ofn.hwndOwner = hOwer;
        ofn.lpstrFilter = "Exe File (*.exe)\0*.exe\0";
        ofn.lpstrFile = szFile;
        ofn.nMaxFile = MAX_PATH;
        ofn.Flags = OFN_EXPLORER;
        ofn.lpstrDefExt = "exe";

        //如果用户指定了一个文件名且点击OK按钮,返回值为非零值。如果用户取消或关闭Save对话框或错误出现,返回值为零。
        if (!GetOpenFileName(&ofn))
            return "";

        XDebug() << szFile;

试了很多参数,最后得到了解决办法,将ofn.Flags改成这样就好了

ofn.Flags = OFN_EXPLORER | OFN_READONLY;

这样再打开就不会出现延迟的情况了。