2011-02-05 16 views
5

con C#, yo era fácilmente capaz de conseguir el efecto que quería:Creación de una ventana usando CreateWindowEx sin un icono

standard window without icon in title bar

Sin embargo, estoy teniendo problemas para hacer lo mismo con la API de Win32 en C. No sé cómo crear una ventana que tenga sin ícono (en absoluto), pero todavía tiene una leyenda, un botón para minimizar y un botón para cerrar.

He registrado mi clase correctamente, pero no puedo imaginarme qué poner para los estilos de ventana/estilos de ventana extendida.

static const TCHAR lpctszTitle[] = TEXT("Stuff"), lpctszClass[] = 
    TEXT("StuffClass"); 

HWND hWnd = CreateWindowEx(WS_EX_LAYERED | WS_EX_TOPMOST, lpctszClass, 
    lpctszTitle, WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX, 
    CW_USEDEFAULT, 0, 250, 55, NULL, NULL, hThisInstance, NULL); 

El código anterior produce:

standard window WITH an icon in the title bar

que todavía tiene un icono en la barra de título y no es lo que quería.

Respuesta

7

Una ventana estándar requiere un icono porque necesita alguna forma de representación en la barra de tareas en la parte inferior de la pantalla. ¿Qué se debe mostrar cuando presiona Alt + Pestaña en el selector de ventanas si una de las ventanas principales no tiene un ícono?

Debe especificar el WS_EX_DLGMODALFRAME extended style. Este es el mismo efecto que WinForms establece cuando apaga el icono en la barra de título.

Usted también necesita para asegurarse de que no especifica un icono cuando se registra la clase de ventana. Es necesario configurar los hIcon y hIconSm campos de la estructura WNDCLASSEX a 0.

cambiar su código a la siguiente:

static const TCHAR lpctszTitle[] = TEXT("Stuff"), lpctszClass[] = 
    TEXT("StuffClass"); 

HWND hWnd = CreateWindowEx(WS_EX_LAYERED | WS_EX_TOPMOST, lpctszClass, 
    lpctszTitle, WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX, 
    CW_USEDEFAULT, 0, 250, 55, NULL, NULL, hThisInstance, NULL); 
+0

Lo intenté, pero luego la ventana no tenía botón de cierre. http://localhostr.com/files/k3WzHR6/Stuff.png –

+0

@myeviltacos: Supongo que no entendí el sentido de la pregunta. Al eliminar el menú del sistema, de hecho se elimina el cuadro de cierre; eso es por diseño. En realidad, está buscando una ventana de diálogo para emular el estilo similar en WinForms. Una ventana principal estándar no hará lo que está esperando. He actualizado mi respuesta. –

+0

¡Gracias, eso era exactamente lo que necesitaba! –

1

En una nota lateral, utilizar Spy ++ u otra herramienta similar para ver los estilos que cualquier HWND dado realmente lo usa. Apúntala a tu ventana C# y luego duplica los estilos informados en tu código C.

Cuestiones relacionadas