我不太了解GetWindowText
如何在与调用方相同的线程上为窗口工作。如果GetWindowText
阻塞直到消息被处理,线程如何调用DispatchMessage
?已在GetWindowText
中被阻止。这是否意味着必须始终从与操作消息循环的线程不同的线程中调用GetWindowText
?
最佳答案
GetWindowText
只是SendMessage(WM_GETTEXT)
的一个薄包装。
发送到窗口的消息始终在创建该窗口的线程中进行处理(窗口具有“线程相似性”)。发送的消息不会经过DispatchMessage
,而是GetMessage
(或PeekMessage
或MsgWaitForMultipleObjects
)将直接调用窗口过程,以处理从另一个线程发送的消息。如果消息是从同一线程发送的,则SendMessage
将调用窗口过程。
SendMessage
documentation说:
和the GetMessage
documentation says:
从the PeekMessage
docs:
以前在Raymond Chen's excellent blog, The Old New Thing上突出显示了发送消息的行为,所有Win32开发人员都应订阅:
当然,在StackOverflow上也可以找到相关的问题:
关于windows - 同步使用GetWindowText,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9346508/