如果您在Windows 7上将Google Chrome 3.0.195.21调整为非常小的宽度(我还没有尝试过其他版本),则窗口按钮会悬挂在窗口上。奇怪的窗口绘画
窗口大小没有扩展,并且突出端不响应鼠标。
窗口的缩略图预览仅显示窗口内的按钮部分; Aero Peek预览显示所有按钮。
突出显示在Spy ++中(据我所知)。
这是怎么做的?
我该怎么做这样的事情? (我写C#,但也会采用C++的答案)
编辑:如果不清楚,我问我怎么能在我自己的程序中做出这样的悬而未决。
如果您在Windows 7上将Google Chrome 3.0.195.21调整为非常小的宽度(我还没有尝试过其他版本),则窗口按钮会悬挂在窗口上。奇怪的窗口绘画
窗口大小没有扩展,并且突出端不响应鼠标。
窗口的缩略图预览仅显示窗口内的按钮部分; Aero Peek预览显示所有按钮。
突出显示在Spy ++中(据我所知)。
这是怎么做的?
我该怎么做这样的事情? (我写C#,但也会采用C++的答案)
编辑:如果不清楚,我问我怎么能在我自己的程序中做出这样的悬而未决。
当在桌面上调整窗口大小时,Windows依靠WM_GETMINMAXINFO消息以获得大小限制,所以该窗口将保持可用 - 按照Microsoft guidelines,
[调整大小的窗口]应设置一个最小的窗口大小如果有一个大小低于该内容不再可用。对于可调整大小的控件,请将可调整大小的最小元素大小设置为其最小功能大小,例如列表视图中的最小功能列宽度。
默认情况下,Windows强制标题栏高度为高度约100像素宽度(最小/最大/关闭按钮+名称的几个字母)。要移除该约束,您应该自己处理WM_GETMAXINFO消息,并将最小大小更改为任何必需的大小。
的C#代码的例子可以适应from here:
private const long WM_GETMINMAXINFO = 0x24;
public struct POINTAPI
{
public int x;
public int y;
}
public struct MINMAXINFO
{
public POINTAPI ptReserved;
public POINTAPI ptMaxSize;
public POINTAPI ptMaxPosition;
public POINTAPI ptMinTrackSize;
public POINTAPI ptMaxTrackSize;
}
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg == WM_GETMINMAXINFO)
{
MINMAXINFO mmi = (MINMAXINFO)m.GetLParam(typeof(MINMAXINFO));
mmi.ptMinTrackSize.x = 0;
mmi.ptMinTrackSize.y = 0;
System.Runtime.InteropServices.Marshal.StructureToPtr(mmi, m.LParam, true);
}
base.WndProc(ref m);
}
和(同时研究这个)我发现another SO question这同样的问题涉及。显然你也需要重写WM_WINDOWPOSCHANGING
以便在Vista和/或C#中工作。 (我见过的另一个例子是在Delphi中,也不需要覆盖后面的消息)。
这是编程相关的。如果问题不清楚,我会问如何做出这样的悬念。 – SLaks 2009-10-02 01:05:39
有人得说出来:你为什么要这样?我宁愿看到一个窗口限制其最小宽度,所以这不会发生在第一位。 – MusiGenesis 2009-10-02 01:13:06
显然不适用于窗口按钮,但它可能对状态指示器等有用。另外,我很好奇。 – SLaks 2009-10-02 02:25:12