14
Dans wpf, comment puis-je empêcher l'utilisateur de déplacer les fenêtres en faisant glisser la barre de titre?WPF désactive le déplacement de la fenêtre
Dans wpf, comment puis-je empêcher l'utilisateur de déplacer les fenêtres en faisant glisser la barre de titre?WPF désactive le déplacement de la fenêtre
Puisque vous ne pouvez pas définir un WndProc
directement dans WPF, vous devez obtenir un HwndSource
, et ajouter un crochet à lui:
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;
}
ok, +1 pour vous; leçons apprises pour moi :) –
Que devrait renvoyer WndProc? IntPtr.Zero? – naeron84
Cela fonctionne, la valeur de retour n'a pas d'importance. Donc IntPrt.Zero va très bien. – naeron84