14
En wpf, ¿cómo puedo evitar que el usuario mueva las ventanas arrastrando la barra de título?Ventana de deshabilitación de WPF en movimiento
En wpf, ¿cómo puedo evitar que el usuario mueva las ventanas arrastrando la barra de título?Ventana de deshabilitación de WPF en movimiento
Como no se puede definir un WndProc
directamente en WPF, es necesario obtener un HwndSource
, y añadir un gancho a la misma:
public Window1()
{
InitializeComponent();
this.SourceInitialized += Window1_SourceInitialized;
}
private void Window1_SourceInitialized(object sender, EventArgs e)
{
WindowInteropHelper helper = new WindowInteropHelper(this);
HwndSource source = HwndSource.FromHwnd(helper.Handle);
source.AddHook(WndProc);
}
const int WM_SYSCOMMAND = 0x0112;
const int SC_MOVE = 0xF010;
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
switch(msg)
{
case WM_SYSCOMMAND:
int command = wParam.ToInt32() & 0xfff0;
if (command == SC_MOVE)
{
handled = true;
}
break;
default:
break;
}
return IntPtr.Zero;
}
bien, +1 para usted; lecciones aprendidas para mí :) –
¿Qué debería devolver WndProc? IntPtr.Zero? – naeron84
Está funcionando, el valor de retorno no importa. Así que IntPrt.Zero está bien. – naeron84