如果您在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