作成したRichTextBoxで文字列を選択している状態にしてその部分にカーソルを移動すると、なぜかカーソルがチラチラします。これ、どうなっているのでしょうか?
画像ではちょっとわかりませんが、文字列が選択されている部分のうえをカーソルが移動するとカーソルがAllow型とBeam型に高速で切り替わり、チラチラして落ち着かないのです。
解決策はコレ!
WM_SETCURSORを捕捉してSetCursor関数を呼び出します。
WM_SETCURSOR メッセージは、マウス入力がキャプチャされていない状態でマウスカーソルがウィンドウ内で動いたときに送信されます。
アプリケーションがこのメッセージを処理した場合は、以降の操作を中断するには 1 を、以降の操作を続けるには 0 を返します。
ということでSetCursor関数を呼び出して、以降の操作を中断するために 1 を返す。これでカーソルがチラチラして鬱陶しく感じることはありません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
public class RichTextBoxEx : RichTextBox { protected override void WndProc(ref Message m) { const int WM_SETCURSOR = 0x20; if (m.Msg == WM_SETCURSOR) { SetCursor(mCursor.Handle); m.Result = new IntPtr(1); return; } base.WndProc(ref m); } public Cursor mCursor = Cursors.IBeam; public override Cursor Cursor { set { mCursor = value; } get { return mCursor; } } [System.Runtime.InteropServices.DllImport("user32.dll")] public static extern int SetCursor(IntPtr cursor); } |