如何在仅消息窗口中获取WM_TOUCH消息

时间:2012-05-23 13:55:38

标签: windows winapi input touch

我刚开始一个项目,我希望从触摸屏接收所有触摸事件来处理它们,无论哪个活动窗口。我正在使用带有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消息,它可以正常工作。

根据此post,仅消息窗口需要处于活动状态。我试了一下,结果很奇怪,SetActiveWindow返回NULL(所以应该有问题)但是GetLastError不能保留它。这不会使我的程序工作。我还没有深入研究这个问题,我想知道为什么这不起作用。

感谢。

1 个答案:

答案 0 :(得分:0)

使用follow代码,你可以注册所有调用wm_touch hook dll的窗口。 function.so你可以捕获Wm_TOUCH消息。 RegisterTouchWindow(((PCWPSTRUCT)lParam) - &gt; hwnd,0);