2010-11-02 4 views
15

Sto cercando di utilizzare CreateWindowEx per generare un messaggio di sola finestra:Utilizzando CreateWindowEx fare una finestra di messaggio di sola

_hWnd = CreateWindowEx(0, NULL, NULL, 0, 0, 0, 0, 0, HWND_MESSAGE, NULL, NULL, NULL); 

Quando la mia applicazione esegue questa linea restituisce sempre _hWnd = 0. Che cosa sto facendo di sbagliato?

+0

si dovrebbe essere in grado di chiamare GetLastError() per maggiori informazioni. –

+0

Esiste un codice di esempio per eseguire ciò tramite MFC [qui] (http://www.codeproject.com/KB/dialog/messageonly.aspx). Ciò dovrebbe nascondere alcuni della complessità del parametro API Win32. –

risposta

39

lpClassName non deve essere NULL. Registrare la classe utilizzando la funzione RegisterClassEx e passarla a CreateWindowEx.

static const char* class_name = "DUMMY_CLASS"; 
WNDCLASSEX wx = {}; 
wx.cbSize = sizeof(WNDCLASSEX); 
wx.lpfnWndProc = pWndProc;  // function which will handle messages 
wx.hInstance = current_instance; 
wx.lpszClassName = class_name; 
if (RegisterClassEx(&wx)) { 
    CreateWindowEx(0, class_name, "dummy_name", 0, 0, 0, 0, 0, HWND_MESSAGE, NULL, NULL, NULL); 
} 
+0

Oh, terrore! Speravo di evitare 'RegisterClass' dato che la documentazione è molto ambigua. Conosci un buon esempio? –

+1

Ho aggiunto un esempio. –

+1

Senza una classe, in quale altro modo si alimenterebbe la procedura della finestra con il sistema? (Conosco sottoclassi tramite GetWindowLong()) –

-4

Secondo the Microsoft docs il nome della classe deve essere "Messaggio".

Acclamazioni & hth.,

+10

La tabella che elenca la classe della finestra 'Message' è descritta come" La tabella seguente descrive le classi di sistema che sono disponibili solo per l'uso dal sistema e sono elencate qui per completezza. " quindi non penso che Windows si aspetta che tu usi la classe della finestra 'Message'. Sarebbe comunque inutile che in questo caso si debba sottoclasse per fornire la propria procedura di finestra ... –

+0

downgrade per assicurarsi che gli altri non ritengano che sia una risposta valida. Vedere il commento sopra per un motivo (è una classe di solo sistema, non può essere utilizzata da un non-sistema) – YePhIcK

Problemi correlati