2010-11-02 22 views
15

Estoy intentando utilizar CreateWindowEx para generar un mensaje de sólo ventana:CreateWindowEx hacer una ventana de mensajes de sólo

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

Cuando mi aplicación ejecuta esta línea siempre devuelve _hWnd = 0. ¿Qué estoy haciendo mal?

+0

usted debería ser capaz de llamar a GetLastError() para obtener más información. –

+0

Hay un código de ejemplo para hacer esto a través de MFC [aquí] (http://www.codeproject.com/KB/dialog/messageonly.aspx). Esto debería ocultar parte de la complejidad del parámetro API de Win32. –

Respuesta

39

lpClassName no debería ser NULL. Registre la clase usando la función RegisterClassEx y páselo 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, pavor! Esperaba evitar 'RegisterClass' ya que la documentación es muy ambigua. ¿Conoces un buen ejemplo? –

+1

He añadido un ejemplo. –

+1

Sin una clase, ¿de qué otra forma alimentarías el procedimiento de ventana al sistema? (Sé de subclases a través de GetWindowLong()) –

-4

Según the Microsoft docs el nombre de la clase debe ser "mensaje".

Saludos & HTH.,

+10

La tabla que enumera la clase de ventana 'Mensaje' se describe como" La siguiente tabla describe las clases del sistema que están disponibles solo para el uso del sistema. Se enumeran aquí para mayor completitud ". así que no creo que Windows espere que use la clase de ventana 'Message'. Sería inútil de todos modos, ya que entonces tendría que hacer una subclase para proporcionar su propio procedimiento de ventana ... –

+0

degradando para asegurarse de que otros no lo consideren una respuesta válida. Vea el comentario anterior por una razón (es una clase de solo sistema, no puede ser utilizada por un sistema diferente) – YePhIcK

Cuestiones relacionadas