Cómo mover un formulario arrastrando el área cliente del formulario

Para una versión de Microsoft Visual Basic .NET de este artículo, consulte 320684 .

EN ESTA TAREA

Resumen

En este artículo paso a paso se muestra cómo permitir que un usuario mueva un formulario arrastrando el área cliente del formulario.

Introducción

Al diseñar una aplicación, desea permitir al usuario mover el formulario de una aplicación arrastrando el área cliente del formulario. Por ejemplo, es aconsejable hacerlo si el formulario no tiene una barra de título, o si el formulario tiene un irregular (es decir, no rectangular) forma.

Un ejemplo de una aplicación que proporciona este tipo de funcionalidad es la de Reproductor de Windows Media de Microsoft. El Reproductor de medios le permite seleccionar una "máscara" para dar una apariencia personalizada para el Reproductor. Cuando se selecciona un aspecto, la barra de título está oculta y puede mover la ventana arrastrando el propio formulario.

Cuando Microsoft Windows controla la actividad del mouse (ratón) en un formulario, Windows envía el mensaje WM_NCHITTEST al formulario para determinar dónde se producen los eventos del mouse. Por ejemplo, si hace clic en la barra de título de un formulario, el formulario devuelve un valor de HTCAPTION, que indica que se produce el evento de mouse (ratón) en la barra de título. Si hace clic en el área cliente del formulario, el formulario devuelve un valor de HTCLIENT, lo que indica que se produce el evento de mouse (ratón) en el área cliente del formulario.

Cuando se reemplaza el método WndProc del formulario, puede interceptar el mensaje WM_NCHITTEST y determinar dónde se produce la actividad del mouse (ratón) en el formulario. Si la actividad se produce en el área de cliente, puede devolver un valor de HTCAPTION, que hace que Windows manejar una actividad como si la actividad se produce realmente en la barra de título.

Ejemplo de código siguiente reemplaza el método WndProc del formulario. El código intercepta el mensaje WM_NCHITTEST y determina si se produce la actividad del mouse (ratón) en el área cliente del formulario. Si se produce la actividad del mouse (ratón) en el área de cliente, el procedimiento devuelve un valor de HTCAPTION, que hace que Windows controlar el evento como si se produce en la barra de título.


Nota: si se reemplaza el método WndProc del formulario de esta manera, también se reemplazan los eventos del mouse para el formulario y no se ejecuta ningún código que contienen esos controladores de eventos.

Crear el ejemplo

  1. Cree un nuevo proyecto de aplicación para Windows de Visual C#. De forma predeterminada, se crea Form1.
  2. En el menú Ver , haga clic en código.
  3. Pegue el código siguiente en la clase Form1 :
    private const int WM_NCHITTEST = 0x84;private const int HTCLIENT = 0x1;
    private const int HTCAPTION = 0x2;

  4. Agregue el método siguiente a la clase Form1 :
    protected override void WndProc(ref Message m){
    switch(m.Msg)
    {
    case WM_NCHITTEST:
    base.WndProc(ref m);
    if ((int)m.Result == HTCLIENT)
    m.Result = (IntPtr)HTCAPTION;
    return;
    break;
    }
    base.WndProc(ref m);
    }


  5. Guarde y ejecute el proyecto.
  6. Haga clic en cualquier parte del área de cliente del formulario y, a continuación, intente arrastrar el formulario. Nota que puede mover correctamente el formulario arrastrándolo desde cualquier lugar de la barra de título o de área de cliente del formulario.
Propiedades

Id. de artículo: 320687 - Última revisión: 17 ene. 2017 - Revisión: 1

Comentarios