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 フック dll を呼び出すすべてのウィンドウを登録できます。function.wm_TOUCH メッセージをキャッチできます。RegisterTouchWindow( ((PCWPSTRUCT)lParam)->hwnd,0);

于 2013-07-26T08:48:47.803 に答える