我刚开始一个项目,我希望从触摸屏接收所有触摸事件来处理它们,无论哪个活动窗口。我正在使用带有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;
}
我测试了以下内容:
根据此post,仅消息窗口需要处于活动状态。我试了一下,结果很奇怪,SetActiveWindow返回NULL(所以应该有问题)但是GetLastError不能保留它。这不会使我的程序工作。我还没有深入研究这个问题,我想知道为什么这不起作用。
感谢。
答案 0 :(得分:0)
使用follow代码,你可以注册所有调用wm_touch hook dll的窗口。 function.so你可以捕获Wm_TOUCH消息。 RegisterTouchWindow(((PCWPSTRUCT)lParam) - &gt; hwnd,0);