如何将SendMessage()发送到另一个线程上创建的窗口?

bob*_*obo 5 c++ winapi multithreading

我有一种情况,我想要SendMessage一个在另一个线程上创建的窗口而不是正在调用的窗口SendMessage.

默认行为似乎是永远阻止而不起作用.

所以我改变了调用PostMessage,它没有阻止发送线程,但是消息似乎永远不会到达预期的窗口.

那么我如何SendMessage在一个单独的线程上创建一个窗口,或者这是不可能的?

Set*_*gie 1

您创建的每个控件都属于创建它的线程,这意味着该控件的 WndProc 将在创建该控件的线程中运行。您可以使用 SendMessage 和 PostMessage 自由地将消息发送到任何控件。

  • 这绝对是“不正确的”:SendMessage 存在的原因之一是允许一个 GUI 线程与另一个 GUI 线程通信:它执行一系列内务工作来管理线程之间的同步。拥有一个具有许多 GUI 线程的进程是完全合法的,每个线程都拥有窗口 - 前提是每个线程都正确处理消息。话虽如此,拥有单个 GUI 线程并适当地使用非 GUI 工作线程通常是一种更简单、更合适的设计。 (3认同)
  • @Seth:根据定义,Windows“属于”创建它们的线程:具体来说,这意味着发送或发布到该窗口的任何消息都将由创建它的线程处理。但是*任何*其他线程[1]都可以自由地使用SendMessage或PostMessage向该窗口发送/发布消息(并且Windows执行适当的工作以确保消息被路由/编组到HWND的创建者/所有者线程)。([1]假设线程位于同一桌面上并且具有适当的 UIPI 权限。) (3认同)