【发布时间】:2011-06-15 15:49:50
【问题描述】:
我们刚刚将应用程序从 MDI 容器移至单个文档界面。我们的用户习惯于使用 MDI 父级中的“Windows”菜单并排显示窗口。我们想训练他们右键单击 Windows 任务栏并使用那里的窗口管理功能。
在 Delphi 应用程序中,我们注意到 windows shell 为隐藏的“应用程序”窗口留出了空间。因此,如果我只打开两扇窗户,它将安排三个房间。应用程序窗口并未真正显示,但仍有空间。
由于我们有两个不同的应用程序,情况变得更糟。如果他们在每个应用程序中只打开一个窗口并希望并排显示它们,实际上会尝试占用 4 个窗口。
因此,我看到的不是两个各占屏幕 1/2 的窗口,而是两个占桌面 1/4 的窗口,而屏幕的其余部分是打开的。
我发现在我的应用程序启动时添加一行来隐藏应用程序窗口可以解决这个问题。
ShowWindow(Application.Handle, SW_HIDE);
编辑以防有人不阅读 直到答案。基于克雷格的 在下面回答我正在设置窗户 样式改为 WS_EX_TOOLWINDOW 而不是 隐藏窗口。 SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) 或 WS_EX_TOOLWINDOW);
我的(原始)问题是:这安全吗(隐藏应用程序窗口)?我想知道隐藏应用程序窗口是否会破坏其他东西。我需要注意什么副作用吗?有没有更好的方法来解决这个问题?
我使用的是 Delphi 2007。问题似乎在 Windows XP、Vista 和 7 中是一致的。
更新:一些答案似乎认为问题在于应用程序表单图标可见。事实并非如此。我已经将 MainFormOnTaskbar 设置为 true。
此外,如果您正在对此进行测试,请注意 Delphi IDE(仅在 2007 中测试)会使事情变得更糟。尝试这个。打开 Delphi IDE 和两个记事本实例。最小化 IDE,但不要最小化两个记事本。右键单击选择并排显示 Windows。您将看到每个记事本占据屏幕的 1/3。关闭 IDE 并再次选择 Show Windows Side by Side,每个将占据屏幕的 1/2。
【问题讨论】:
标签: delphi