1

我刚刚开始一个项目,我想从触摸屏接收所有触摸事件以处理它们,无论是哪个活动窗口。我正在使用带有 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不持有。这不会使我的程序正常工作。我还没有深入研究钩子的事情,我想知道为什么这首先不起作用。

谢谢。

4

1 回答 1

0

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

于 2013-07-26T08:48:47.803 回答