2009-05-12 14 views
5

Me gustaría crear ventanas emergentes de la siguiente manera:Aero Glass Bordes de Ventanas Emergentes en C#

http://i44.tinypic.com/345bklu.jpg

alt text http://i44.tinypic.com/345bklu.jpg

En mi aplicación usando C#. He investigado NativeWindow, pero no estoy seguro de si esta es la manera correcta de hacerlo. Cómo puedo lograr esto. Quiero una ventana se comporte exactamente igual que el control de volumen o "conectar a" ventana en Windows 7.

Editar: me olvidó mencionar que me gusta la ventana para ser un tamaño fijo.

Respuesta

2

que fue capaz de lograr esto:

if (m.Msg == 0x84 /* WM_NCHITTEST */) { 
    m.Result = (IntPtr)1; 
    return; 
} 
base.WndProc(ref m); 
+0

gracias - que corrigió el error con el cursor de espera apareciendo – zsalzbank

2

En sus CreateParams, especifique WS_POPUP y WS_THICKFRAME.

4

El uso de Windows Forms, crear un formulario y establezca lo siguiente:

Text = ""; 
FormBorderStyle = Sizable; 
ControlBox = false; 
MaximizeBox = false; 
MinimizeBox = false; 
ShowIcon = false; 

Editar:

Esto requiere la ventana sea considerable, pero puede hacer trampa en que un poco. Establezca MinimumSize y MaximumSize en el tamaño deseado. Esto evitará que el usuario cambie el tamaño.

Como sugirió Jeff, también se puede hacer esto en CreateParams:

protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams cp = base.CreateParams; 
     unchecked 
     { 
      cp.Style |= (int)0x80000000; // WS_POPUP 
      cp.Style |= 0x40000;   // WS_THICKFRAME 
     } 
     return cp; 
    } 
} 

En ambos casos, sin embargo, todavía tendrá un cursor de tamaño cuando se pasa sobre los bordes. No estoy seguro de cómo evitar que eso suceda.

+0

¿Crees que sería posible capturar algún tipo de mensaje de ventana para deshabilitar los cursores? Gracias – zsalzbank

+0

@codethis: Miré un poco y no encontré nada. Sin embargo, debe haber una manera. –

+0

Pude deshacerme del cursor de cambio de tamaño al cancelar WM_SETCURSOR. protegido override void WndProc (Mensaje ref m) { si (m.Msg == 0x20) { m.Result = (IntPtr) 1; devolución; } base.WndProc (ref m); } Eso lo hace, pero deja un extraño efecto secundario: la primera vez que pasa el mouse sobre un borde, aparece el cursor de espera. Luego, cuando lo mueve al área del cliente, funciona correctamente. No estoy seguro de cómo enviar por fax ese ... – zsalzbank

0

Para evitar que los cursores de tamaño sobre las fronteras manejan WM_NCHITTEST y cuando lo largo de los bordes vuelven HTBORDER.

Cuestiones relacionadas