プロジェクトを開始したばかりで、アクティブなウィンドウに関係なく、タッチ スクリーンからすべてのタッチ イベントを受信して処理したいと考えています。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 はそれを保持しません。これは私のプログラムを動かしません。私はまだフックのことを掘り下げていません。なぜこれが機能しないのかを最初に知りたいです。
ありがとう。