2010-11-02 5 views
15

J'essaie d'utiliser CreateWindowEx pour générer une fenêtre de message uniquement:Utiliser CreateWindowEx faire une fenêtre seule message

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

Quand mon application exécute cette ligne, il retourne toujours _hWnd = 0. Qu'est-ce que je fais mal?

+0

Vous devriez être en mesure d'appeler GetLastError() pour obtenir plus d'informations. –

+0

Il existe un exemple de code pour cela via MFC [ici] (http://www.codeproject.com/KB/dialog/messageonly.aspx). Cela devrait masquer une partie de la complexité des paramètres de l'API Win32. –

Répondre

39

lpClassName ne doit pas être NULL. Enregistrez la classe en utilisant la fonction RegisterClassEx et transmettez-la à 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, effroi! J'espérais éviter 'RegisterClass' car la documentation est très ambiguë. Connaissez-vous un bon exemple? –

+1

J'ai ajouté un exemple. –

+1

Sans classe, sinon, comment alimenter la procédure de fenêtre au système? (Je connais le sous-classement via GetWindowLong()) –

-4

Selon the Microsoft docs le nom de classe doit être "Message".

Vive & HTH.,

+10

La table répertoriant la classe de la fenêtre 'Message' est décrite comme suit:" Le tableau suivant décrit les classes système disponibles uniquement pour l'utilisation par le système. donc je ne pense pas que Windows vous demande d'utiliser la classe de fenêtre 'Message'. Il serait inutile de toute façon comme alors vous auriez à sous-classe à fournir sa propre procédure de fenêtre ... –

+0

rétrogradation pour s'assurer que les autres ne considèrent pas cela comme une réponse valide. Voir le commentaire ci-dessus pour une raison (c'est une classe système seulement, ne peut pas être utilisé par un non-système) – YePhIcK

Questions connexes