定制的 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 保存对话框不再花哨——为啥?的主要内容,如果未能解决你的问题,请参考以下文章
jsp调用java方法导出excel为啥会弹出保存或下载的对话框,调用完之后直接将文件保存到指定路径下即可。