我想在一个线程上创建一个窗口,然后将该HWND迁移到将要执行的任意数量的线程之一。我的程序将有多个这样的窗口。这是可能的还是Win32 API不是为此而设计的?
答案 0 :(得分:10)
是的,在某种程度上。
您可以从任何线程向HWND发送和发送消息。
http://msdn.microsoft.com/en-us/library/ms644944(v=VS.85).aspx
尝试从另一个线程配置UI(例如添加控件)将非常糟糕。但是,如果您向窗口发送消息,则可以确保将在创建线程上处理该消息。
答案 1 :(得分:6)
不,这是不可能的。窗口用于其消息循环的线程(您称之为“正在执行”)在创建窗口时定义。您可以创建多个线程并从它们启动消息循环(从而在它们上创建窗口),但这通常被认为是危险的。
答案 2 :(得分:2)
不,这些调用没有并发检查。
答案 3 :(得分:2)
must be called from the same thread:CreateWindow
和GetMessage
(或其各自的等价物)有两个重要的来电。你的解决方案不会,所以这是错误的。
您可以在任何主题中调用PostMessage
。 SendMessage
有点危险,因为它阻塞了跨线程场景,并且可能会死锁。