gpt4 book ai didi

c++ - 来自 CreateWindow/CreateDialog 的 HWND 可以从另一个线程获取消息吗?

转载 作者:行者123 更新时间:2023-12-02 10:38:58 25 4
gpt4 key购买 nike

使用 Win32 API,是否可以在一个线程中创建一个窗口或对话框,然后从另一个线程为它收集事件?

HWND 是否与线程绑定(bind)?

尝试下面的人为示例,我从未看到 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 具有线程关联性 - 用于窗口的消息在创建并因此拥有该窗口的线程上得到处理。

关于c++ - 来自 CreateWindow/CreateDialog 的 HWND 可以从另一个线程获取消息吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54063789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com