定制的 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 保存对话框不再花哨——为啥?的主要内容,如果未能解决你的问题,请参考以下文章