2009-04-18 8 views
0

Je dois résoudre certains problèmes et enchanter le concepteur de formulaires écrit depuis longtemps pour un projet de base de données. In Design code de classe Panel I rencontré ces lignesConcepteur de formulaires personnalisés, commandes de déplacement/redimensionnement à l'aide de 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 indique si la souris était sur une arête de contrôle sélectionné. Ce qui m'embrouille, ce sont ces messages de Windows: il semble qu'il n'y ait pas de documentation sur WM_SYSCOMMAND avec les paramètres 0xF001-0xF009 (peut-être qu'il commence une sorte de «séquence de drag/redimensionnement»). Des idées?

Si ma suggestion est bonne, alors comment puis-je annuler ces séquences?

Répondre

2

Ils sont undocumented paramètres. Après avoir cherché, j'ai réussi à trouver cette liste.

  • 0xF000 (Centre curseur sur la forme)
  • 0xF001 (Redimensionner à gauche)
  • 0xF002 (Redimensionner de droite)
  • 0xF003 (Redimensionnement de haut)
  • 0xF004 (Verrouillez le coin inférieur droit du formulaire, le cor déplacer NER pour Redimensionner)
  • 0xF005 (même à partir du coin en bas à gauche)
  • 0xF006 (Enfermez droite et la bordure gauche, redimensionner les autres)
  • 0xF007 (Enfermez frontière et à droite, redimensionner d'autres frontière)
  • 0xF008 (verrouillage à gauche et jusqu'à la frontière et redimensionnez autre)
  • 0xF009 (Faites glisser partout)
  • 0xF010 (Mettez le curseur centré sur l'ordre supérieur)
  • 0xF020 (formulaire Auto-Réduire)
  • 0xF030 (formulaire Auto-Maximize)

Référence: http://www.delphi3000.com/articles/article_1054.asp#Comments

1

Basé sur mon Programmation Win32 (Recteur et Nouvel arrivant) p902-903 explique WM_SYSCOMMAND est envoyé lorsque l'utilisateur sélectionne un élément dans le menu système (plutôt que d'envoyer le WM_COMMAND normal).

Le MSDN help dit SC_SIZE = 0xF000 et et Win32 Programmation dire aussi Windows utilise les quatre bits de poids faible des ID de menu du système interne prédéfinis mais ne va pas à clarifier leur utilisation. Merci stukelly pour les avoir clarifiées.

Questions connexes