掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
マウスカーソルを変更するには? (ID:53249)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> この辺も日本語化して欲しいなぁ・・>MSDN でも,誤訳は勘弁……。 #VC++ 6.0の頃の訳は誤訳だらけで使い物にならなかった > いまいち、WM_SETCURSORの説明も意味不明なのですが、こいつの動きとして > 該当ウィンドウにイベントが飛んでくる→該当ウィンドウのDefWindowProc()が親ウィンドウにイベントを投げる→親ウィンドウのDefWindowProc()がヒットテストを行う・・・なのかなと思ってて、DefWindowProc()に頼らないなら自分でヒットテストを行わなければならないのかなと思ってるのですが、そもそもそれ自体が私の思い違い? キャプチャされていないマウスの移動に対する流れは, ・マウスの移動が起きる ・一番上に表示されているウィンドウにWM_NCHITTESTが投げられる ・一番上に表示されているウィンドウにWM_SETCURSORが投げられる ・一番上に表示されているウィンドウに,WM_MOUSEMOVEまたはWM_NCMOUSEMOVEが投げられる という風になります。 そして,WM_NCHITTESTに対するDefWindowProcの反応は,その場所に関するヒットテスト情報です。 WM_NCHITTESTに対して,例えば常にHTCAPTIONを返すようにすると, ウィンドウのどこをドラッグしてもウィンドウが移動するようになります。 #リージョンを設定した場合などの一般的な動作。 次に,WM_SETCURSORに対するDefWindowProcの反応ですが, 1. 親ウィンドウがある場合は,親ウィンドウにWM_SETCURSORを投げる。TRUEが返ってきたら,それ以上何もせずにTRUEを返す 2. ヒットテスト情報を参考に,カーソルを設定する i. ヒットテストがHTCLIENTの場合 A. カーソルがウィンドウクラスに登録されている場合,そのカーソルを設定する B. そうでない場合,何もしない ii. そうでない場合,システム既定のカーソルを設定する 3. FALSEを返す ということになります。 既定のカーソルとしてLoadCursor(NULL, IDC_ARROW)を指定し, ウィンドウプロシージャとしてDefWindowProcを指定したウィンドウを子ウィンドウにし, 親ウィンドウは常にSetCursor(LoadCursor(NULL, IDC_IBEAM)); return TRUE;とした場合, 子ウィンドウ上でもI-beamカーソルが表示されます。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.