2008-10-13 17 views
10

¿Cómo puedo hacer que mi ventana no tenga una barra de título pero aparezca en la barra de tareas con texto descriptivo? Si configura la propiedad .Text del Formulario, .net le otorga una barra de título, que yo no quiero.Cómo hacer que una ventana tenga texto en la barra de tareas pero no en la barra de título

 this.ControlBox = false; 
     this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; 
     this.MaximizeBox = false; 
     this.MinimizeBox = false; 
     this.ShowInTaskbar = true; 
     this.Text = "My title for task bar"; 

He encontrado una solución parcial, para anular CreateParams:

protected override System.Windows.Forms.CreateParams CreateParams 
    { 
     get 
     { 
      System.Windows.Forms.CreateParams cp = base.CreateParams; 
      cp.Style &= ~0x00C00000; // WS_CAPTION 
      return cp; 
     } 
    } 

Sin embargo, esto hace que la ventana para cambiar de tamaño como si tuvieran una barra de título, es decir, que es más alto de lo que debería ser. ¿Hay alguna buena solución para esto?

Respuesta

5

Un enfoque para estudiar podría ser la de establecer la propiedad FormBorderStyle de su Form a None (en lugar de FixedDialog).

El inconveniente de este enfoque es que se pierden los bordes de la ventana y la barra de título. El resultado es que pierde la lógica de cambio de tamaño/formateo de formularios que normalmente obtiene "gratis" con Windows Forms; Tendría que lidiar con esto implementando su propia lógica de mover/cambiar el tamaño de forma en los manejadores de eventos MouseDown y MouseMove.

También estaría interesado en conocer mejores soluciones.

2

Simplemente configure el estilo de borde en Ninguno.

this.FormBorderStyle = FormBorderStyle.None; 
2

Una vez que haya eliminado los bordes con el FormBorderStyle, como se mencionó anteriormente, puede hacer que se pueda arrastrar con bastante facilidad. Lo describo al http://www.blackwasp.co.uk/DraggableBorderless.aspx.

+0

Agradable y por ejemplo, pero en el mundo real, pero a menudo hay más consideraciones para arrastrar el formulario, por ejemplo, no queremos arrastrar si el mouse está sobre un control o entre controles, o si queremos cambiar el tamaño si está cerca de las fronteras. – dbkk

+0

Absolutamente. También debes capturar eso, probando qué tan cerca estás de los límites del formulario, cambiando el puntero del mouse, obteniendo el tamaño de borde preferido de Windows, etc. Sin embargo, un poco demasiado para un ejemplo; quizás crearé otro. – BlackWasp

6

En mi caso tengo un formulario con FormBorderStyle = FormBorderStyle.SizableToolWindow y la siguiente CreateParams anulación resolvieron el problema (es decir, ahora tengo una forma sin título y sin margen adicional por el título, pero se mantiene el título en la barra de tareas):

protected override System.Windows.Forms.CreateParams CreateParams 
{ 
    get 
    { 
     var parms = base.CreateParams; 
     parms.Style &= ~0x00C00000; // remove WS_CAPTION 
     parms.Style |= 0x00040000; // include WS_SIZEBOX 
     return parms; 
    } 
} 
Cuestiones relacionadas