Costumbre diseñador de formularios, mover / cambiar el tamaño de los controles utilizando WinAPI

StackOverflow https://stackoverflow.com/questions/763239

  •  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?

¿Fue útil?

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_

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top