私は、SWFファイルを再生するためにflash ocxを使用するC++アプリケーションを維持しています。SetCursorとは別にカーソルの形状をリセットすることはできますか?
ユーザーがSWF内のボタンの上に置いた、フラッシュは内部IDC_HAND
カーソルを設定するWinAPIのSetCursor
関数への呼び出しを行う - 私は私が監視したときにWinAPIのはAPI Monitor V2 (rohitab.com)を経由して、カーソルに関連した関数の呼び出していることがわかります。しかし、私の場合、カーソルは変化しない、すなわち、IDC_ARROW
のままである。
アプリケーション自体は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;
}
誰も私がこのケースで/変更カーソルの形状をリセットすることができる人に知らせてくださいすることができます。アプリケーションのウィンドウには、すなわち、カーソルを復元しません、以下のようWM_SETCURSOR
メッセージを処理しますか?
更新:興味深いのは、私は2つの同様の設定が反対の結果を生み出すという事実です。
私が維持しているアプリケーションは実際には "SysListView32"にWH_GETMESSAGE
フックをインストールし、Flash Playerを作成するスレッドを起動します。だからセットアップはそれほど単純ではありません。
ただし、基本的にwinmainでプレーヤを作成する簡単な例を作成すると、上のコードは完全に機能し、カーソルが変更されます。
したがって、最初のケースで何かがカーソルの状態をリセットするように見えます。どのようにを見つけるには?
私はDefWindowProcがWNDCLASSに基づいてカーソルを設定すると思いますので、/または両方ではありません。 –
ちょっと待ってください。子供はWM_SETCURSORを先に取得しませんか?したがって、子がWM_SETCURSORを処理しない場合、DefWindowProcを介して親に移動します。 http://blogs.msdn.com/b/oldnewthing/archive/2006/11/21/1115695.aspx – Alex
問題は、上記のコードが**動作することです**サンプルアプリケーションを使用してかなりのプレーヤーを作成すると多くのwinmain()。しかし、同じことをする私のアプリケーションでは動作しませんが、フックや他のスレッドが関わっています。さらに、両方のアプリケーション(実際とサンプル)はWinAPIモニタソフトウェアで**同一の**出力を生成します。 – Alex