2009-05-30 17 views
5

En mi programa, estoy utilizando la anulación de WndProc para evitar que mi formulario cambie de tamaño. La cosa es que el cursor todavía está allí cuando mueves el puntero al borde de la forma. ¿Hay alguna forma de ocultar este cursor?C# Hide Resize Cursor

+3

no he probado esto, así que sólo estoy comentando, ¿ha tratado de interceptar el mensaje WM_NCHITTEST? Más información aquí: http://msdn.microsoft.com/en-us/library/ms645618(VS.85).aspx –

Respuesta

7

he encontrado una manera de utilizar WndProc gracias al enlace Lasse me ha enviado. Gracias por su respuesta Jon, pero no era exactamente lo que quería. Para aquellos que quieren saber cómo lo hice, utilicé esta:

protected override void WndProc(ref Message m) 
    { 
     const int WM_NCHITTEST = 0x0084; 

     switch (m.Msg) 
     { 
      case WM_NCHITTEST: 
       return; 
     } 

     base.WndProc(ref m); 
    } 

No he probado a fondo así que no sé si hay efectos secundarios, pero funciona muy bien para mí en este momento :).

+0

Estaba a punto de responder algo así cuando lo publicaste, me alegro de que hayas encontrado tu respuesta. Sin embargo, no necesitas un descanso después del regreso. –

+0

sí, tienes razón. fuerza de hábito^_^ – Ozzy

8

¿Por qué no configurar la propiedad FormBorderStyle de forma adecuada en su lugar? Entonces tampoco necesita usar WndProc.

Aquí hay un código de ejemplo para demostrar - haga clic en el botón para cambiar o no la forma puede cambiar de tamaño:

using System; 
using System.Windows.Forms; 
using System.Drawing; 

class Test 
{ 
    [STAThread] 
    static void Main(string[] args) 
    { 
     Button button = new Button 
     { 
      Text = "Toggle border", 
      AutoSize = true, 
      Location = new Point(20, 20) 
     }; 
     Form form = new Form 
     { 
      Size = new Size (200, 200), 
      Controls = { button }, 
      FormBorderStyle = FormBorderStyle.Fixed3D 
     }; 
     button.Click += ToggleBorder; 
     Application.Run(form); 
    } 

    static void ToggleBorder(object sender, EventArgs e) 
    { 
     Form form = ((Control)sender).FindForm(); 
     form.FormBorderStyle = form.FormBorderStyle == FormBorderStyle.Fixed3D 
      ? FormBorderStyle.Sizable : FormBorderStyle.Fixed3D; 
    } 
} 
+0

lo tengo configurado para cambiar el tamaño de la caja de herramientas porque en Vista, se obtiene ese bonito borde alrededor de él. usando 3d fijo, no obtienes ese borde (establezco controlBox en falso y sin título) – Ozzy

+0

Suponiendo que te refieres a SizeableToolWindow, ¿has probado FixedToolWindow? Se ve exactamente lo mismo para mí, simplemente no se puede redimensionar. –

+0

Downvoters: por favor explique, para que la respuesta pueda mejorarse. –

0

Basta con configurar FormBorderStyle para esto. ¿Por qué estás usando WndProc para esto?

+0

porque en este caso formborderstyle no es suficiente. – Ozzy

0

@Ozzy/Lasse ¡Trabajó para mí!

tenía el mismo problema: los estilos de borde

estándar no dan el aspecto que quiero, CreateParams personalizados hacer. Especifiqué los mismos valores para Size, MinimumSize y MaximumSize para desactivar el cambio de tamaño. Los cursores de cambio de tamaño todavía se están estableciendo sin embargo, gracias a Ozzy & Lasse esto ahora se maneja mediante el filtrado de WM_NCHITTEST ...

Gracias