用户抱怨当他们在 MDI 容器中有几个最小化的窗口时,除非它们重新区分它们,否则无法区分它们。我想知道是否可以使最小化窗口更宽一点,以便标题中的文本可以包含 6 个字符?
提前致谢!
3 回答
不,这是不可能的。Windows 使用当前系统参数确定最小化窗口的宽度,如果不更改整个系统的值,就无法为单个应用程序动态更改此值。
具体来说,所有最小化窗口的默认大小为 160x31。在 MDI 应用程序中,您实际上可以看到这个大小,因为窗口被最小化到其 MDI 主机,而不是 Windows 任务栏。Raymond Chen(Microsoft Windows Shell 团队的一名开发人员)不久前发表了几篇博客文章,解释了为什么选择这种特定大小以及它的含义。第一个可在此处获得:为什么最小化的窗口的外观尺寸为 160x31?第二个后续条目可以在这里阅读:不,真的,为什么是 160x31?正如他在第二篇文章中解释的那样:
微型标题栏的宽度由结构的
iWidth
成员决定MINIMIZEDMETRICS
。SystemParametersInfo
您可以在函数的帮助下检索和更改此结构。(分别使用SPI_GETMINIMIZEDMETRICS
和SPI_SETMINIMIZEDMETRICS
标志。)有些人会提到MinWidth
注册表值,但那些人是错误的。请注意,例如,弄乱MinWidth
需要一个注销周期,而使用SPI_SETMINIMIZEDMETRICS
会立即生效。那是因为SPI_SETMINIMIZEDMETRICS
更新了内部状态变量,而修改注册表只是更改了数据库中的一个值,一旦你登录就没有人注意到它。身高呢?这只是标题栏的高度,您可以从“显示”控制面板的“外观”选项卡中进行调整。(以编程方式,您可以使用该有用
SystemParametersInfo
的功能,这次使用结构的iCaptionHeight
成员NONCLIENTMETRICS
。)
由于我怀疑您的用户是否真的希望您通过 P/Invoking the SystemParametersInfo
function来弄乱他们的默认系统参数,所以您没有太多选择。我的建议,特别是如果他们一次只使用一个窗口并将其他窗口最小化,是切换到替代界面。MDI 的目的是允许用户平铺或层叠多个窗口,以便他们一次可以看到多个窗口。由于这听起来不是典型的用例,因此将应用程序切换为使用选项卡可能会更好地为您服务。这通常称为选项卡式文档界面 (TDI),是旧的多文档界面 (MDI) 的一种更现代的实现。多年来,它变得非常流行。查看维基百科文章。
对于和我有同样问题的人,我找到了解决方案:
(win+r) regedit HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics add the string value "MinWidth".
Change the string value named "MinWidth". Set its value using the following formula: -15*width in pixels
For me, acceptable one was -3300
Little drawback: It also changes size of the minimized windows in the taskbar (make them much wider when there is a few of them in taskbar)