Flash ocx を使用して SWF ファイルを再生する C++ アプリケーションを管理しています。
ユーザーが SWF のボタンにカーソルを合わせると、フラッシュが内部的に WinAPISetCursor
関数を呼び出してカーソルを設定します。API Monitor V2 (rohitab.com)IDC_HAND
を介してカーソル関連関数への WinAPI 呼び出しを監視するとわかります。ただし、私の場合、カーソルは変化していません。つまり、そのままです。IDC_ARROW
アプリケーション自体はまったく呼び出しませんSetCursor
。アプリケーションのウィンドウは、WM_SETCURSOR
メッセージを次のように処理します。つまり、カーソルを復元しません。
case WM_SETCURSOR:
{
static bool restoreCursor = false;
if (LOWORD(lParam) != HTCLIENT)
{
restoreCursor = true;
}
if (restoreCursor)
{
restoreCursor = false;
// DefWindowProc will set the cursor
break;
}
return 1;
}
この場合、カーソルの形状をリセット/変更できる人を教えてください。
更新: 興味深いのは、反対の結果をもたらす 2 つの同様のセットアップがあるという事実です。
私が管理しているアプリケーションは、実際WH_GETMESSAGE
に「SysListView32」にフックをインストールし、Flash プレーヤーを作成するスレッドを起動します。そのため、セットアップはそれほど単純ではありません。
ただし、基本的に winmain でプレーヤーを作成する簡単な例を作成すると、上記のコードは完全に機能し、カーソルが変更されます。
そのため、最初のケースでは何かがカーソルの状態をリセットしているようです。カーソルをリセットするものを見つける方法は?