如何解决`AttachThreadInput` 的适用条款和条件
这是对 win32 初始代码的简单修改 - 从基本模板生成:
if (!InitInstance(hInstance,true)
{
return false;
}
std::thread{ [hInstance,main_thread= GetCurrentThreadId()] {
MSG msg{};
if (!InitInstance(hInstance,true)
{
return;
}
auto const current_thread{ GetCurrentThreadId() };
HACCEL hAccelTable = LoadAccelerators(hInstance,MAKEINTRESOURCE(IDC_WIN32APP));
if (!AttachThreadInput(main_thread,current_thread,true))
return;
// Main message loop:
while (GetMessage(&msg,nullptr,0))
{
if (!TranslateAccelerator(msg.hwnd,hAccelTable,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
AttachThreadInput(main_thread,false);
} }.join();
创建并显示两个窗口。但显然,发送到主线程中创建的窗口的消息不会被处理。有什么不见了?我在 msdn 文档和许多论坛帖子的语气中找不到任何内容。我在论坛中只能找到很多关于 SetFocus
和模态对话框的抱怨——这不是我想要的。
提前致谢。
解决方法
好的。我不得不回去专注于原始码头的确切措辞。术语输入是指HID。我的困惑是由于两个线程都需要存在消息队列。因此,在输入事件时,不同的消息(伪)同时发送到两个线程。两个线程都会观察 HID 事件;由于接收消息的顺序不同,他们对事件的感知会有所不同。
谢谢大家的提示。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。