Job*_*fey 3 c c++ windows winapi multithreading
使用Win32 API,是否可以在一个线程中创建一个窗口或对话框,然后从另一个线程收集它的事件?
HWND是否与线程绑定?
尝试下面的人为设法示例,我从未见过GetMessage().
HWND g_hWnd;
DWORD WINAPI myThreadProc(LPVOID lpParam)
{
while(GetMessage(&msg, hWnd, 0, 0) > 0)
{
...
}
}
int 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)
{
...
}
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
g_hInstance = hInstance;
CreateThread(NULL, 0 myThreadProc, NULL, 0, NULL);
...
}
有人能解释一下我所看到的吗?
没有.
GetMessage在当前线程的输入队列上返回消息.HWND参数是一个过滤器,因此GetMessage仅返回当前线程用于该窗口的输入队列中的消息.
Windows具有线程关联性 - 用于窗口的消息在创建的线程上处理,因此拥有该窗口.