使用Win32 API,是否可以在一个线程中创建一个窗口或对话框,然后从另一个线程中为其收集事件?
HWND是否与线程绑定(bind)?
尝试下面的人为的例子,我从来没有看到GetMessage()火。
HWND g_hWnd;
DWORD WINAPI myThreadProc(LPVOID lpParam)
{
while(GetMessage(&msg,hWnd,0,0)> 0)
{
...
}
}
完整的WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
hWnd = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_MYDIALOG),0,myDlgProc);
CreateThread(NULL,0 myThreadProc,NULL,0,NULL);
...
}
但是在这里,我知道。
HWND g_hWnd;
HINSTANCE g_hInstance;
DWORD WINAPI myThreadProc(LPVOID lpParam)
{
hWnd = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_MYDIALOG),0,myDlgProc);
while(GetMessage(&msg,hWnd,0,0)> 0)
{
...
}
}
完整的WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
g_hInstance = hInstance;
CreateThread(NULL,0 myThreadProc,NULL,0,NULL);
...
}
有人可以解释我所看到的吗?
最佳答案
不。
GetMessage在当前线程的输入队列上返回消息。 HWND参数是一个筛选器,因此GetMessage仅在打算用于该窗口的当前线程的输入队列中返回消息。
Windows具有线程关联性-用于窗口的消息在创建的线程上得到处理,因此拥有该窗口。
关于c++ - 可以从另一个线程获取来自CreateWindow/CreateDialog的HWND吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/617248/