visual tutorial studio descargar wpf

tutorial - ¿Cómo muevo una ventana de wpf a un valor superior negativo?



wpf vs winforms (1)

Si utilizo dragMove, la ventana wpf no se moverá a una ubicación donde el valor y sea negativo. Sin embargo, puedo establecer el valor superior de Windows a un valor negativo. ¿Hay una manera simple de habilitar dragMove para permitir que la parte superior de la ventana se mueva arriba de la posición de las pantallas 0?

Editar:

Parece que este es el manejo de la ventana predeterminada de moveWindow. Verificado con una llamada a SendMessage (hwnd, WM_SYSCOMMAND, SC_MOVE, null);


Como encontré, la ventana se moverá a la ubicación "negativa", pero luego saltará. Para evitar esto, podrías hacer algo como:

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)); } }

Manejar WM_WINDOWPOSCHANGING de esta manera evitará cualquier movimiento de la ventana a menos que se presione el botón izquierdo del mouse. Esto también incluye maximizar la ventana y el cambio programático de la posición de la ventana, por lo que deberá adaptar el código si necesita otro comportamiento.