我正在尝试使用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);
}
}
,我什至不知道从哪里开始。