我不太明白如何GetWindowText在与调用者相同的线程上使用窗口.如果GetWindowText阻塞直到消息被处理,那么线程如何调用DispatchMessage?它被封锁了GetWindowText.这是否意味着GetWindowText必须始终从操作消息循环的单独线程调用?
GetWindowText只是一个薄的包装SendMessage(WM_GETTEXT).
发送到窗口的消息总是在创建窗口的线程中处理(窗口具有"线程关联性").发送的消息不通过DispatchMessage,而不是GetMessage(或PeekMessage或MsgWaitForMultipleObjects)会直接调用窗口过程,从另一个线程发送的消息.如果消息是从同一个线程发送的,SendMessage则会调用窗口过程.
该
SendMessage函数调用指定窗口的窗口过程,并且在窗口过程处理完消息之前不会返回.
从调用线程的消息队列中检索消息.该函数调度传入的已发送消息,直到发布的消息可供检索.
调度传入的已发送消息,检查线程消息队列中是否有已发布的消息,并检索消息(如果存在).
发送消息的行为之前已在Raymond Chen的优秀博客The Old New Thing中突出显示,所有Win32开发人员都应该订阅:
如果使用上述任何发送类型函数将消息发送到属于发送线程的窗口,则同步调用.
回想一下,
SendMessage将消息直接传递给窗口过程; 消息泵永远不会看到它.
当然,StackOverflow上有相关的问题: