¿Qué condiciones deben cumplirse para que se publique un mensaje en la ventana?

StackOverflow https://stackoverflow.com/questions/1206506

  •  05-07-2019
  •  | 
  •  

Pregunta

Registré exitosamente una clase de ventana usando RegisterClassEx y creé una ventana usando CreateWindowEx :

m_hInstance = ::GetModuleHandle(NULL);
...
m_hWnd = ::CreateWindowEx(0, "CMyClassName", "Message Window", 0, 0, 0, 0, 0, HWND_MESSAGE, 0, m_hInstance, 0);

El procedimiento de ventana asociado recibe los mensajes 36, 129, 131 y 1, y el HWND devuelto no es nulo. Sin embargo, cuando más tarde llamo a PostMessage (desde otro hilo):

bool bPosted = ::PostMessage(m_hWnd, WM_APP + 3, 0, 0);

aunque bPosted sea verdadero, no se llama al procedimiento de ventana. Estoy tratando de averiguar por qué debería ser eso. El procedimiento de la ventana es el de ejemplo de MSDN - Intenté agregar otro caso una vez que confirmé que los mensajes estaban llegando.

¿Qué condiciones deben cumplirse para publicar un mensaje en la ventana?

¿Fue útil?

Solución

No hay condiciones.

Algunas restricciones existen cuando se usan mensajes [0, WM_USER) pero ninguna sobre WM_APP.

¿Está verificando el código de retorno de PostMessage ?

Probablemente debería publicar (al menos parte de) el código que está usando para PostMessage, así como el WndProc registrado.

También debe proporcionar un bucle de mensajes , si no lo estás haciendo. La mayoría de los marcos ocultarán este detalle (al menos un poco), pero si estás tratando con win32 directamente, debes proporcionar el tuyo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top