2011-02-05 10 views
5

Con C#, sono stato facilmente in grado di ottenere l'effetto che volevo:Creazione di una finestra utilizzando CreateWindowEx senza un'icona

standard window without icon in title bar

Tuttavia, sto avendo difficoltà a fare la stessa cosa utilizzando l'API Win32 in C. Non so come creare una finestra che abbia nessuna icona (affatto), ma ha ancora una didascalia, un pulsante di riduzione a icona e un pulsante di chiusura.

Ho registrato correttamente la mia classe, ma non riesco a capire cosa mettere per gli stili di finestra/gli stili di finestra estesa.

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); 

Il codice sopra prodotto:

standard window WITH an icon in the title bar

che ha ancora un'icona nella barra del titolo e non è quello che volevo.

risposta

7

Una finestra standard richiede un'icona perché richiede una qualche forma di rappresentazione nella barra delle applicazioni nella parte inferiore dello schermo. Cosa deve essere visualizzato quando si preme Alt + Scheda nel commutatore di finestre se una delle finestre principali non ha un'icona?

È necessario specificare lo WS_EX_DLGMODALFRAME extended style. Questo è lo stesso effetto impostato da WinForms quando si spegne l'icona nella barra del titolo.

È anche necessario assicurarsi che non si specifica un'icona quando si registra la classe di finestra. È necessario impostare le hIcon e hIconSm campi della struttura WNDCLASSEX a 0.

Modificare il codice di seguito:

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

Ho provato, ma poi la finestra non aveva alcun pulsante di chiusura. http://localhostr.com/files/k3WzHR6/Stuff.png –

+0

@myeviltacos: Suppongo di aver perso il punto della domanda. La rimozione del menu di sistema rimuove infatti la casella di chiusura; questo è di design. In realtà stai cercando una finestra di dialogo per emulare lo stile simile in WinForms. Una finestra principale standard non farà ciò che speri. Ho aggiornato la mia risposta. –

+0

Grazie, era esattamente quello di cui avevo bisogno! –

1

Su un lato nota, utilizzare Spy ++ o un altro strumento simile per vedere gli stili qualsiasi dato HWND effettivamente utilizza. Puntalo sulla tua finestra C#, quindi duplica gli stili riportati nel tuo codice C.

Problemi correlati