我有一個程序將FormBorderStyle
設置爲None
。我一直在網上查找,發現了一個用於調整窗體大小的工作代碼,但只有當窗體沒有控件時纔有空格。儘管我的整個表單都是控件,但每個邊都有控件,而且我無法在邊上創建空間。有沒有辦法使用Windows API或其他東西來擴展調整大小的握柄,或者使用控件來觸發調整大小事件MouseDown
?調整無處不在的窗體的大小,無空格
1
A
回答
1
它可以以不同的方式完成。這個答案的主要思想是將一個面板放在窗體上作爲內容容器,然後排除它的右下角區域(大小抓握矩形),以使該區域不再面向面板,並且該矩形的所有鼠標事件將被路由到窗體,甚至小組不繪製該地區。
爲了實現這一目標,請執行下列操作步驟:
木箱表格並設置邊框樣式屬性設置爲無
添加小組形式,內容所有者並將其名稱以PANEL1和設置面板的Dock屬性爲填充
覆蓋
OnSizeChanged
的形式並設置與窗體大小相同的區域,然後排除其底部ri ght角落。這樣,排除的區域不再屬於面板,並且包括WM_NCHITTEST
的所有消息將被我們的WndProc
接收;該小組甚至不繪製該區域。覆蓋
WndProc
得到WM_NCHITTEST
消息,如果該點是我們在OnSizeChanges
圍成的區域,顯示調整指針,並準備調整。覆蓋
OnPaint
繪製大小握
截圖:
,這裏是用在它的容器面板一些控件的形式:
如果您將鼠標移動到大小抓地位置上,您將看到鼠標指針變爲右下角大小指針,並且可以使用它來調整表單大小。
您可以設置MinimumSize
廣告MaximumSize
的形式來防止醜陋的太小或太大的形式。
代碼:
下面是完整的代碼:因爲有與碼頭的控制設置爲填充和左
private int tolerance = 16;
private const int WM_NCHITTEST = 132;
private const int HTBOTTOMRIGHT = 17;
private Rectangle sizeGripRectangle;
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_NCHITTEST:
base.WndProc(ref m);
var hitPoint = this.PointToClient(new Point(m.LParam.ToInt32() & 0xffff, m.LParam.ToInt32() >> 16));
if (sizeGripRectangle.Contains(hitPoint))
m.Result = new IntPtr(HTBOTTOMRIGHT);
break;
default:
base.WndProc(ref m);
break;
}
}
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
var region = new Region(new Rectangle(0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height));
sizeGripRectangle = new Rectangle(this.ClientRectangle.Width - tolerance, this.ClientRectangle.Height - tolerance, tolerance, tolerance);
region.Exclude(sizeGripRectangle);
this.panel1.Region = region;
this.Invalidate();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
ControlPaint.DrawSizeGrip(e.Graphics, Color.Transparent, sizeGripRectangle);
}
相關問題
- 1. 如何在FormLayoutPanel中調整窗體的大小時調整窗體的大小?
- 2. 無法調整matplotlib窗口的大小
- 3. removeClass()無法在窗口調整大小
- 4. 根據窗體調整大小和調整窗體控件調整大小
- 5. Windows窗體調整大小
- 6. 在調整窗體大小時調整窗體元素
- 7. 調整窗體大小調整控件
- 8. 如何在窗體大小調整時自動調整網格大小?
- 9. TeleUSE窗口無法調整大小
- 10. WPF無邊界窗口調整大小
- 11. C#:使窗體不可調整大小
- 12. 調整無窗口小部件的窗口大小
- 13. Tkinter:在調整大小的窗口的按鈕中調整字體的大小
- 14. 在德爾福的無邊界窗體/窗口中平滑調整大小
- 15. 媒體查詢無法調整大小
- 16. jQuery可調整大小和可拖動的窗口無法調整大小
- 17. wxWidgets的可調整大小的窗格
- 18. 調整C#Windows窗體的大小
- 19. 調整窗體大小的問題
- 20. 調整窗體大小的控件
- 21. jquery調整窗體的大小「formAddNewRow」
- 22. ExtJs 4 - 調整窗口大小的窗體項目調整大小
- 23. 禁用窗體窗口調整大小?
- 24. 在C#中垂直(僅)可調整大小的窗體窗體#
- 25. 使用JQuery調整窗口大小調整CSS字體大小
- 26. 調整大小主窗體調整大小(WPF,C#)
- 27. 調整無邊界窗體的大小不同於遠邊的限制嗎?
- 28. 窗體大小調整和最大化
- 29. 無法通過拖動邊框來調整窗體大小
- 30. 在窗體編輯器中調整字體大小後調整Delphi窗體的大小
1-填充將無法正常工作。 2-我會在角落放一個sizegrip圖片的pictureBox?沒關係,如果我只能從右下角調整它的大小。 – XeZrunner
我應該設置什麼樣的填充? – XeZrunner