Cita:
Iniciado por aguml ... ¿por qué para unos mensajes se usa una y para otros otra? ...
SendMessage y PostMessage tienen distinto comportamiento, hacen cosas diferentes:
De la documentación:
SendMessage [https://msdn.microsoft.com/en-us/library/ms644950%28VS.85%29.aspx]
Cita: Sends the specified message to a window or windows. The SendMessage function calls the window procedure for the specified window and does not return until the window procedure has processed the message.
hace una llamada
sincrónica al procedimiento que maneja el mensaje, y no vuelve hasta que ese procedimiento se haya ejecutado; en el ejemplo que ponés, al método que maneja WM_CLOSE.
PostMessage [https://msdn.microsoft.com/en-us/library/ms644944%28VS.85%29.aspx]
Cita: Places (posts) a message in the message queue associated with the thread that created the specified window and returns without waiting for the thread to process the message.
Pone el mensaje en la cola de mensajes de la ventana de destino y vuelve; es
asincrónico.
Entonces,
Cita:
Iniciado por aguml Si ambos funcionan ¿que diferencias hay?
La diferencia relevante es el comportamiento; qué hacen más que cómo lo hacen. En algunos casos se podrá usar una u otra con el mismo resultado, pero otras veces tendrá sentido una y no la otra.
Por ejemplo, si se necesita enviar un mensaje en forma sincrónica, no se usará PostMessage; si se necesita que sea asincrónico, no se usará SendMessage.