gpt4 book ai didi

wpf - 如何将 wpf 窗口移动到负顶部值?

转载 作者:行者123 更新时间:2023-12-03 03:00:23 24 4
gpt4 key购买 nike

如果我使用dragMove,wpf 窗口将不会移动到 y 值为负数的位置。不过,我可以将窗口顶部值设置为负值。有没有一种简单的方法来启用dragMove以允许窗口顶部移动到显示0位置之上?

编辑:

看来这是默认窗口对moveWindow的处理。通过调用 SendMessage( hwnd, WM_SYSCOMMAND, SC_MOVE, null); 进行验证

最佳答案

正如我所发现的,窗口将移动到“负”位置,但随后会跳回来。为了防止这种情况,你可以这样做:

public partial class Window1: Window {

public Window1() {
InitializeComponent();
}

private void Window_MouseDown(object sender, MouseButtonEventArgs e) {
DragMove();
}

public struct WINDOWPOS {
public IntPtr hwnd;
public IntPtr hwndInsertAfter;
public int x;
public int y;
public int cx;
public int cy;
public UInt32 flags;
};

private static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) {
switch(msg) {
case 0x46://WM_WINDOWPOSCHANGING
if(Mouse.LeftButton != MouseButtonState.Pressed) {
WINDOWPOS wp = (WINDOWPOS)Marshal.PtrToStructure(lParam, typeof(WINDOWPOS));
wp.flags = wp.flags | 2; //SWP_NOMOVE
Marshal.StructureToPtr(wp, lParam, false);
}
break;
}
return IntPtr.Zero;
}

private void Window_Loaded(object sender, RoutedEventArgs e) {
HwndSource source = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle);
source.AddHook(new HwndSourceHook(WndProc));
}
}

以这种方式处理 WM_WINDOWPOSCHANGING 将阻止窗口的任何移动,除非按下鼠标左键。这包括最大化窗口和以编程方式更改窗口位置,因此如果您需要其他行为,则必须调整代码。

关于wpf - 如何将 wpf 窗口移动到负顶部值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/328127/

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