Costumbre diseñador de formularios, mover / cambiar el tamaño de los controles utilizando WinAPI
-
11-09-2019 - |
Pregunta
Tengo que solucionar algunos problemas y enchance forma diseñador escrito hace mucho tiempo para un proyecto de base de datos. En Diseño código de la clase Panel me encontré con estas líneas
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 indica si ratón era más de cualquier borde de control seleccionado.
Lo que me confunde es estos mensajes de ventanas: parece que no hay documentación sobre WM_SYSCOMMAND con parámetros 0xF001-0xF009 (tal vez que se inicia una especie de 'arrastrar / cambiar el tamaño de la secuencia'). ¿Algunas ideas?
Si mi sugerencia es correcta, entonces ¿Cómo puedo cancelar estas secuencias?
Solución
indocumentados parámetros. Después de buscar he conseguido encontrar esta lista.
- 0xF000 (cursor Centro en el formulario)
- 0xF001 (Cambiar el tamaño de la izquierda)
- 0xF002 (Cambiar el tamaño de la derecha)
- 0xF003 (Cambiar el tamaño de arriba)
- 0xF004 (Bloquear la esquina inferior derecha de la forma, el movimiento hacia arriba esquina izquierda para cambiar el tamaño)
- 0xF005 (el mismo de la esquina inferior izquierda)
- 0xF006 (Bloquear encima de la derecha y el borde izquierdo, cambiar el tamaño de otra)
- 0xF007 (Lock y borde derecho, cambiar el tamaño de otra frontera)
- 0xF008 (bloqueo de la izquierda y hasta la frontera y cambiar el tamaño de otra)
- 0xF009 (Arrastre desde cualquier lugar)
- 0xF010 (Ponga cursor centrado en el orden superior)
- 0xF020 (Auto-Minimizar Formulario)
- 0xF030 (Auto-Maximizar Formulario)
Referencia: http://www.delphi3000.com/articles/article_1054.asp #comentarios
Otros consejos
Con base en mi Win32 programación (Rector y el recién llegado) p902-903 explica WM_SYSCOMMAND
se envía cuando el usuario selecciona un elemento del menú del sistema (en lugar de enviar la normalidad WM_COMMAND
).
El MSDN ayuda dice SC_SIZE = 0xF000 y él y Win32 programación también decir Windows utiliza los cuatro bits de orden inferior de los identificadores de sistema de menú predefinido internamente , pero no se va a aclarar su uso. Gracias stukelly para aclararlos.
ApiViewer y echa un vistazo a partir de las constantes SC_