2009-10-02 90 views
0

如果您在Windows 7上将Google Chrome 3.0.195.21调整为非常小的宽度(我还没有尝试过其他版本),则窗口按钮会悬挂在窗口上。奇怪的窗口绘画

窗口大小没有扩展,并且突出端不响应鼠标。

窗口的缩略图预览仅显示窗口内的按钮部分; Aero Peek预览显示所有按钮。

突出显示在Spy ++中(据我所知)。

这是怎么做的?

我该怎么做这样的事情? (我写C#,但也会采用C++的答案)

编辑:如果不清楚,我问我怎么能在我自己的程序中做出这样的悬而未决。

+0

这是编程相关的。如果问题不清楚,我会问如何做出这样的悬念。 – SLaks 2009-10-02 01:05:39

+2

有人得说出来:你为什么要这样?我宁愿看到一个窗口限制其最小宽度,所以这不会发生在第一位。 – MusiGenesis 2009-10-02 01:13:06

+0

显然不适用于窗口按钮,但它可能对状态指示器等有用。另外,我很好奇。 – SLaks 2009-10-02 02:25:12

回答

2

当在桌面上调整窗口大小时,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中,也不需要覆盖后面的消息)。

+0

这不回答我的问题。我不问如何制作一个非常小的窗口;我在问如何做出悬崖。 – SLaks 2010-01-04 14:19:52

+0

对我来说,这看起来像一个错误 - 当窗口对于按钮来说太小时,它们会悬垂......你是否试图实现这一点,并看到按钮被裁剪? – MaxVT 2010-01-05 07:43:43