2010-11-02 2 views
15

Ich versuche CreateWindowEx zu verwenden, um eine Nachricht Nur-Fenster zu generieren:CreateWindowEx verwenden, um eine Nachricht-Only-Fenster

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

Wenn meine Anwendung führt immer _hWnd = 0 gibt es diese Zeile. Was mache ich falsch?

+0

sollten Sie in der Lage sein GetLastError() aufrufen, weitere Informationen zu erhalten. –

+0

Es gibt Beispielcode, um dies über MFC [hier] (http://www.codeproject.com/KB/dialog/messageonly.aspx) zu tun. Dies sollte einige der Komplexität des Win32-API-Parameters verbergen. –

Antwort

39

lpClassName sollte nicht NULL sein. Registrieren Sie die Klasse mit der Funktion RegisterClassEx und übergeben Sie sie an 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, fürchte dich! Ich hatte gehofft, 'RegisterClass' zu vermeiden, da die Dokumentation dafür sehr zweideutig ist. Kennst du ein gutes Beispiel? –

+1

Ich habe ein Beispiel hinzugefügt. –

+1

Ohne eine Klasse, wie sonst würden Sie die Fensterprozedur dem System zuführen? (Ich weiß über Unterklassen über GetWindowLong()) –

-4

Nach the Microsoft docs der Klassenname sollte "Message" sein.

Beifall & hth.,

+10

Die Tabelle, die die Fensterklasse "Nachricht" aufführt, wird wie folgt beschrieben: "Die folgende Tabelle beschreibt die Systemklassen, die nur für die Verwendung durch das System verfügbar sind. Sie sind hier der Vollständigkeit halber aufgelistet." Ich glaube also nicht, dass Windows von Ihnen erwartet, dass Sie die Fensterklasse "Message" verwenden. Es wäre sowieso nutzlos, denn dann müssten Sie eine Unterklasse einrichten, um eine eigene Fensterprozedur zu erstellen ... –

+0

downgrade, um sicherzustellen, dass andere dies nicht als gültige Antwort betrachten. Siehe den obigen Kommentar aus einem Grund (es ist eine Nur-System-Klasse, kann nicht von Nicht-System verwendet werden) – YePhIcK

Verwandte Themen