gpt4 book ai didi

c# - 如何防止控件更改 Z 顺序?

转载 作者:可可西里 更新时间:2023-11-01 09:50:15 27 4
gpt4 key购买 nike

我在 .Net 中有用户控件,我在 WndProc 中使用 HitTest 以允许在运行时使用鼠标调整它的大小。

问题是在 HitTest 成功后(按下鼠标,拖动以调整大小,释放鼠标)控件在 Z 顺序中向上跳跃并破坏它在表单中的位置。

我需要 HitTest ,因为它是一个非常自定义的控件。

WndProc 中有没有办法阻止控件更改其 Z 顺序?

谢谢。

HitTest 代码:

protected override void WndProc(ref Message m) {
if (!DesignMode && Sizeable && (m.Msg == Win32Wrapper.WM_NCHITTEST)) {
Point Hit = new Point((int)m.LParam & 0xFFFF, (int)m.LParam >> 16);
Hit = this.PointToClient(Hit);
int DistToBorder = 5;
if (Hit.X < DistToBorder) {
if (Hit.Y < DistToBorder) {
m.Result = (IntPtr)Win32Wrapper.HTTOPLEFT;
return;
}
if (Hit.Y > this.ClientRectangle.Bottom - DistToBorder) {
m.Result = (IntPtr)Win32Wrapper.HTBOTTOMLEFT;
return;
}
m.Result = (IntPtr)Win32Wrapper.HTLEFT;
return;
}
else if (Hit.X > ClientRectangle.Right - DistToBorder) {
if (Hit.Y < DistToBorder) {
m.Result = (IntPtr)Win32Wrapper.HTTOPRIGHT;
return;
}
else if (Hit.Y > this.ClientRectangle.Bottom - DistToBorder) {
m.Result = (IntPtr)Win32Wrapper.HTBOTTOMRIGHT;
return;
}
m.Result = (IntPtr)Win32Wrapper.HTRIGHT;
return;
}
else if (Hit.Y < DistToBorder) {
m.Result = (IntPtr)Win32Wrapper.HTTOP;
return;
}
else if (Hit.Y > this.ClientRectangle.Bottom - DistToBorder) {
m.Result = (IntPtr)Win32Wrapper.HTBOTTOM;
return;
}
}

最佳答案

要防止 Z 顺序更改,您应该捕获 WM_WINDOWPOSCHANGING 消息并设置 SWP_NOZORDER 标志。

关于c# - 如何防止控件更改 Z 顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/595888/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com