【发布时间】:2015-05-09 22:26:16
【问题描述】:
Explorer 似乎总是以SW_MAXIMIZE 启动我的应用程序(STARTF_USESHOWWINDOW 设置为STARTUPINFO.dwFlags)。我知道ShowWindow 将使用这个值the first time 你/Windows 需要显示一个窗口,但它具有最大化不应最大化的窗口的不幸后果。
我的窗口是用CreateDialogIndirectParam 创建的,具有以下样式:WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_CLIPCHILDREN|DS_MODALFRAME|DS_CENTER|WS_VISIBLE。为什么ShowWindow 在允许STARTF_USESHOWWINDOW 强制SW_MAXIMIZE 之前不检查是否设置了WS_MAXIMIZEBOX?这是 Windows 中的错误吗?
这发生在装有 Windows 8.1 的 HP Stream 7 上。我不确定 Explorer 这样做是因为它启用了触控还是因为屏幕小。
此 Explorer 行为是否记录在任何地方,是否有办法将其关闭?阻止资源管理器(或任何其他父进程)影响我的初始窗口模式的最佳方法是什么? (我不想阻止以SW_*MINIMIZE* 开头的人)
system32中的WinVer.exe也有同样的问题:
【问题讨论】:
-
您确定您是直接点击实际的 .exe,而不是点击应用了 “运行:最大化” 设置的快捷方式吗?
-
@RemyLebeau 是的,我直接双击 .exe。即使这是一个快捷方式,我的主要问题仍然适用,如何防止第一次调用 ShowWindow 最大化未设置 WS_MAXIMIZEBOX 的窗口?
-
因为你的屏幕很小,内存只有1GB。 Windows 启动在此配置中最大化的所有应用程序。
-
@RaymondChen 此功能是否记录在任何地方?有没有办法关掉它?谁认为在窗口恢复后最大化用户无法再次最大化的应用程序是个好主意?这也让应用看起来很愚蠢,因为他们从没想过会发生这种情况......
-
本意是只最大化可以最大化的应用程序,但
ShowWindow中有一个错误,如果启动信息显示SW_MAXIMIZE,它也会最大化不可最大化的窗口。对不起。您可以通过检测有人尝试最大化启动您的应用程序 (GetStartupInfo) 并首先创建一个虚拟窗口(这将吃掉虚假的最大化)来解决此问题。
标签: windows winapi touch windows-8.1 showwindow