Ich muss einige Probleme beheben und Formular-Designer, die vor langer Zeit für ein Datenbankprojekt geschrieben wurden, verzaubern. Klassencode In Design Platte begegnete ich diese ZeilenBenutzerdefinierter Formulardesigner, Steuerelemente verschieben/Größe ändern unter Verwendung von WinAPI
private void DesignPanel_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
(sender as Control).Capture = false;
switch (FMousePosition)
{
case MousePosition.mpNone:
SendMessage((sender as Control).Handle, WM_SYSCOMMAND, 0xF009, 0);
break;// Move
case MousePosition.mpRightBottom:
SendMessage((sender as Control).Handle, WM_SYSCOMMAND, 0xF008, 0);
break;//RB
case MousePosition.mpLeftBottom:
SendMessage((sender as Control).Handle, WM_SYSCOMMAND, 0xF007, 0);
// ... here are similar cases ...
case MousePosition.mpLeft:
SendMessage((sender as Control).Handle, WM_SYSCOMMAND, 0xF001, 0);
break;//L
}
}
}
FMousePosition zeigt an, ob die Maus über jede Kante der ausgewählten Kontrolle.
Was mich verwirrt ist diese Windows-Nachrichten: Es scheint, es gibt keine Dokumentation auf WM_SYSCOMMAND mit Parametern 0xF001-0xF009 (vielleicht startet es eine Art 'Drag/Resize-Sequenz'). Irgendwelche Ideen?
Wenn mein Vorschlag richtig ist, wie kann ich diese Sequenzen dann abbrechen?