如何使用StatusStrip中的SizingGip调整无边界表单的大小?

时间:2019-06-02 14:08:01

标签: c# winforms borderless statusstrip resizegrip

我正在尝试使用SizingGrip中的StatusStrip来调整主要的 Borderless Form的大小。问题在于SizingGrip本身没有事件,因此我不能使用处理程序。我还希望通过SizingGrip只能 调整大小。

通过添加握柄,鼠标光标会自动将其外观更改为调整大小箭头,因此我想到达触发此行为的位置,然后尝试将某种处理程序发送到Form

On this answer我得到了Form所需要的行为,而在this one上,我可以从StatusStrip处获得控制力。

问题是Message对象对我来说是新的,我仍然无法理解WndProc中被覆盖的StatusStrip如何将处理程序从WndProc来触发调整大小。

此外,此处理程序还必须在Form中发送光标位置(包含在夹点中),并具有相对于StatusStrip的坐标。可能还需要考虑到这种转变。

This approach差点错过。由于Form没有事件,因此我找不到使用SizingGrip方法的方法。

我检查了有关该主题的每个问题,最终得到的解决方案永远不会利用已经存在的问题。

那么,这有可能吗?

我要使用的SendMessage的功能如下(改编自first answer参考):

Form

至于我的public partial class Form1 : Form { public Form1() { InitializeComponent(); } protected override void WndProc(ref Message m) { const int RESIZE_HANDLE_SIZE = 10; switch (m.Msg) { case 0x0084/*NCHITTEST*/ : base.WndProc(ref m); if ((int)m.Result == 0x01/*HTCLIENT*/) { Point screenPoint = new Point(m.LParam.ToInt32()); Point clientPoint = this.PointToClient(screenPoint); if(clientPoint.Y > RESIZE_HANDLE_SIZE && clientPoint.Y > (Size.Height - RESIZE_HANDLE_SIZE)) { if(clientPoint.X > RESIZE_HANDLE_SIZE && clientPoint.X >= (Size.Width - RESIZE_HANDLE_SIZE)) { m.Result = (IntPtr)17/*HTBOTTOMRIGHT*/ ; } } } return; } base.WndProc(ref m); } } ,我什至不知道从哪里开始。

0 个答案:

没有答案