定制的 Windows 保存对话框不再花哨——为啥?

Posted

技术标签:

【中文标题】定制的 Windows 保存对话框不再花哨——为啥?【英文标题】:Customized Windows Save Dialog is no Longer Fancy -- Why?定制的 Windows 保存对话框不再花哨——为什么? 【发布时间】:2010-01-06 23:40:54 【问题描述】:

根据this question,我正在使用自定义模板描述自定义 Win32 保存文件对话框。现在我遇到了一个问题,即“保存文件”对话框没有显示我的计算机的左侧栏、最近的地方等。我可以确认删除自定义模板会带回左侧边栏。我在做什么需要删除它?我如何获得两者?

更新:这是我的一些代码:

info.hInstance = MyGetModuleInstanceRoutine();
info.lpfnHook = MyOFNHookProcRoutine;
info.lpTemplateName = MAKEINTRESOURCEW(myCustomResourceID);
info.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_NOREADONLYRETURN |
              OFN_ENABLESIZING | OFN_ENABLEHOOK | OFN_EXPLORER | OFN_ENABLETEMPLATE;

::GetSaveFileNameW(&info);

注意事项:

MyOFNHookProcRoutine 总是返回 0。 我知道扩展标志 OFN_EX_NOPLACESBAR 并没有设置(即 FlagsEx 为 0)。

【问题讨论】:

您正在与堆积如山的 appcompat 作斗争。将您的代码发布到文件共享服务,以便有人可以查看。 【参考方案1】:

补充来自RED SOFT ADAIR-StefanWoe的答案:

将 WINVER 和 _WIN32_WINNT 设置为 >= 0x0500。

对于 Windows 2000,OPENFILENAME 结构的大小增加了,额外的空间包括 FlagsEx 成员;显然,如果结构太小而无法包含它,Windows 会假定标志OFN_EX_NOPLACESBAR。确保lStructSize 成员也设置正确。

【讨论】:

这是我的问题;将 lStructSize 设置为 sizeof(OPENFILENAMEW) 解决了该问题;谢谢!【参考方案2】:

尝试使用

#define _WIN32_WINNT 0x0501 

之前

#include "windows.h"

这意外地为我解决了同样的问题。

【讨论】:

以上是关于定制的 Windows 保存对话框不再花哨——为啥?的主要内容,如果未能解决你的问题,请参考以下文章

为啥记事本每次保存都说该文件含有unicode格式的字符?

为啥我的 UIView 在重新加载后没有响应?

windows10对话框里的文字显示不全为啥

jsp调用java方法导出excel为啥会弹出保存或下载的对话框,调用完之后直接将文件保存到指定路径下即可。

为啥我的系统盘下生成了两个3.84G的系统文件。 系统是windows7家庭高级版sp1

为啥 Environment.Exit() 不再终止程序?