gpt4 book ai didi

wpf - 在不获取InvalidOperationException的情况下使无窗口WPF窗口可拖动的方法

转载 作者:行者123 更新时间:2023-12-04 07:29:25 25 4
gpt4 key购买 nike

我有一个无边界的WPF主窗口。我正在尝试使最终用户可以拖动窗口。

我已将以下内容添加到Window的构造函数中:

this.MouseLeftButtonDown += delegate { DragMove(); };

问题是,我有一个带有两个按钮的对话框。当我单击这些按钮之一时,我收到未处理的InvalidOperationException消息“仅当鼠标主按钮按下时才能调用DragMove”。

这提出了几个问题:
为什么对话框中的mousedown事件与此有关?
没有这个异常(exception),我该怎么办?

谢谢!

最佳答案

使无边界窗口可移动的“正确”方法是在WM_NCHITTEST消息中返回HTCAPTION。以下代码显示了如何执行此操作。请注意,如果光标在Window的某些可视元素上,则需要返回HTCLIENT,因此此代码仅是入门。

http://msdn.microsoft.com/en-us/library/ms645618(VS.85).aspx

public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}

protected override void OnSourceInitialized(EventArgs e)
{
HwndSource hwndSource = (HwndSource)HwndSource.FromVisual(this);
hwndSource.AddHook(WndProcHook);
base.OnSourceInitialized(e);
}

private static IntPtr WndProcHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handeled)
{
if (msg == 0x0084) // WM_NCHITTEST
{
handeled = true;
return (IntPtr)2; // HTCAPTION
}
return IntPtr.Zero;
}
}

关于wpf - 在不获取InvalidOperationException的情况下使无窗口WPF窗口可拖动的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3274097/

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