我刚刚开始一个项目,我想从触摸屏接收所有触摸事件以处理它们,无论是哪个活动窗口。我正在使用带有 C++ 的 Win32 API(我是 Win32 编程的新手)。我想使用一个仅消息窗口,但我没有成功获得 WM_TOUCH 消息(尽管我认为它是为触摸事件正确创建和注册的)。这是我初始化仅消息窗口的函数。
HWND InitMessageOnlyWindow(HINSTANCE hInstance, int nCmdShow) {
LPWSTR szWindowClassName = TEXT("msgOnly");
WNDCLASSEX windowClass;
memset(&windowClass, 0, sizeof(windowClass));
windowClass.cbSize = sizeof(windowClass);
windowClass.lpfnWndProc = WndProc;
windowClass.lpszClassName = szWindowClassName;
if(RegisterClassEx(&windowClass)==0) {
std::cerr << "RegisterClass" << std::endl;
return 0;
}
HWND hWindow = CreateWindow(
szWindowClassName,
L"",
0,
0, 0, 0, 0,
HWND_MESSAGE,
0, 0, 0);
if (!hWindow) {
std::cerr << "CreateWindow" << std::endl;
return 0;
}
if(RegisterTouchWindow(hWindow, 0)==0) {
std::cerr << "RegisterTouchWindow" << std::endl;
return 0;
}
return hWindow;
}
我已经测试了以下内容:
- 要在仅消息窗口中获取 WM_INPUT 消息,它可以工作。
- 要在经典窗口中获取 WM_TOUCH 消息,它可以工作。
根据这篇文章,仅消息窗口需要处于活动状态。我试了一下,结果很奇怪,SetActiveWindow返回NULL(所以应该有问题)但是GetLastError不持有。这不会使我的程序正常工作。我还没有深入研究钩子的事情,我想知道为什么这首先不起作用。
谢谢。