SetCursor関数の話。
WindowsAPIのSetCursorを使ってみたところ、一瞬だけカーソルが変わって元に戻った。
結果からいうと、マウスに動きがあるとWindowClassに登録されたカーソルに更新される模様。
解決法として、WindowClassのhCursorプロパティにNULLをセットしておいて、デフォのマウスカーソルもSetCursorで登録するとよい。
さらに細かい話をすると。
入力キャプチャされていない時にカーソルが移動すると、WM_SETCURSORっていうウィンドウメッセージが送信される。
これは、クライアントエリア外にカーソルがある場合はWindowsデフォルトのカーソルに。
クライアントエリア内にカーソルがある場合はWindowの生成時にWindowClassに登録されたカーソルに変更するために存在します。
・こっからは未確認
このWM_SETCURSORがDefWindowProc関数内で処理されると上記の動作が行われるので、WM_SETCURSORがきた時はDefWindowProc関数に飛ばさなければ戻らないのかもしれない。
でもこのWM_SETCURSORはウィンドウのサイズ変更時や、テキストボックスの上に来たときのカーソル変更にも使用されてるので、止めるとそれらの変更も止められるかも。
未確認だけどね( ´-`)
カーソルを変更したいときだけフラグを立てておいて、WM_SETCURSORの中でフラグで判断するのがいいのだろうか?
・検索用文字列
マウスカーソルの変更、一瞬で戻る、一瞬だけ出る、変更されない、変わらない、すぐに戻る
コメントする