当前位置:  开发笔记 > 编程语言 > 正文

CreateWindow/CreateDialog中的HWND可以从另一个线程获取GetMessage吗?

如何解决《CreateWindow/CreateDialog中的HWND可以从另一个线程获取GetMessage吗?》经验,为你挑选了1个好方法。

使用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);
    ...
}

有人能解释一下我所看到的吗?



1> Michael..:

没有.

GetMessage在当前线程的输入队列上返回消息.HWND参数是一个过滤器,因此GetMessage仅返回当前线程用于该窗口的输入队列中的消息.

Windows具有线程关联性 - 用于窗口的消息在创建的线程上处理,因此拥有该窗口.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有