在编写文本编辑控件时,对于光标的控制,需要用到 CreateCaret,SetCaretPos,DestroyCaret,ShowCaret,HideCaret API
设置控件 this.SetStyle(ControlStyles.Selectable, true) 使其可以接受焦点,并且扑获Control.GotFocus和Control.LostFocus事件,
1 #region Caret API
2 /// <summary>
3 /// 根据指定的信息创建一个插入符(光标),并将它选定为指定窗口的默认插入符。插入符可以是一根短线、一个方块或者一幅位图。通常用插入符指示文字在文字框中的插入位置
4 /// </summary>
5 /// <param name="hWnd">句柄</param>
6 /// <param name="hBitmap">可以是位图</param>
7 /// <param name="nWidth">宽度</param>
8 /// <param name="nHeight">高度</param>
9 /// <returns></returns>
10 [DllImport("User32.dll")]
11 static extern bool CreateCaret(IntPtr hWnd, int hBitmap, int nWidth, int nHeight);
12 /// <summary>
13 /// 指定插入符的位置
14 /// </summary>
15 /// <param name="x">X坐标</param>
16 /// <param name="y">Y坐标</param>
17 /// <returns></returns>
18 [DllImport("User32.dll")]
19 static extern bool SetCaretPos(int x, int y);
20 /// <summary>
21 /// 清除(破坏)一个插入符
22 /// </summary>
23 /// <returns></returns>
24 [DllImport("User32.dll")]
25 static extern bool DestroyCaret();
26 /// <summary>
27 /// 在指定的窗口里显示插入符(光标)
28 /// </summary>
29 /// <param name="hWnd">句柄</param>
30 /// <returns></returns>
31 [DllImport("User32.dll")]
32 static extern bool ShowCaret(IntPtr hWnd);
33 /// <summary>
34 /// 在指定的窗口隐藏插入符(光标)
35 /// </summary>
36 /// <param name="hWnd">句柄</param>
37 /// <returns></returns>
38 [DllImport("User32.dll")]
39 static extern bool HideCaret(IntPtr hWnd);
40 #endregion
2 /// <summary>
3 /// 根据指定的信息创建一个插入符(光标),并将它选定为指定窗口的默认插入符。插入符可以是一根短线、一个方块或者一幅位图。通常用插入符指示文字在文字框中的插入位置
4 /// </summary>
5 /// <param name="hWnd">句柄</param>
6 /// <param name="hBitmap">可以是位图</param>
7 /// <param name="nWidth">宽度</param>
8 /// <param name="nHeight">高度</param>
9 /// <returns></returns>
10 [DllImport("User32.dll")]
11 static extern bool CreateCaret(IntPtr hWnd, int hBitmap, int nWidth, int nHeight);
12 /// <summary>
13 /// 指定插入符的位置
14 /// </summary>
15 /// <param name="x">X坐标</param>
16 /// <param name="y">Y坐标</param>
17 /// <returns></returns>
18 [DllImport("User32.dll")]
19 static extern bool SetCaretPos(int x, int y);
20 /// <summary>
21 /// 清除(破坏)一个插入符
22 /// </summary>
23 /// <returns></returns>
24 [DllImport("User32.dll")]
25 static extern bool DestroyCaret();
26 /// <summary>
27 /// 在指定的窗口里显示插入符(光标)
28 /// </summary>
29 /// <param name="hWnd">句柄</param>
30 /// <returns></returns>
31 [DllImport("User32.dll")]
32 static extern bool ShowCaret(IntPtr hWnd);
33 /// <summary>
34 /// 在指定的窗口隐藏插入符(光标)
35 /// </summary>
36 /// <param name="hWnd">句柄</param>
37 /// <returns></returns>
38 [DllImport("User32.dll")]
39 static extern bool HideCaret(IntPtr hWnd);
40 #endregion
设置控件 this.SetStyle(ControlStyles.Selectable, true) 使其可以接受焦点,并且扑获Control.GotFocus和Control.LostFocus事件,
1 /// <summary>
2 /// 当控件获得焦点时引发的事件
3 /// </summary>
4 /// <param name="sender"></param>
5 /// <param name="e"></param>
6 private void control_GotFocus(object sender, EventArgs e)
7 {
8 //调用CreateCaret API创建光标
9 //调用SetCaretPos API设置光标位置
10 //调用ShowCaret API显示光标
11 }
12
13 /// <summary>
14 /// 当控件失去焦点时引发的事件
15 /// </summary>
16 /// <param name="sender"></param>
17 /// <param name="e"></param>
18 private void control_LostFocus(object sender, EventArgs e)
19 {
20 //调用HideCaret API隐藏光标
21 //调用DestroyCaret API清除光标
22 }
23
24
2 /// 当控件获得焦点时引发的事件
3 /// </summary>
4 /// <param name="sender"></param>
5 /// <param name="e"></param>
6 private void control_GotFocus(object sender, EventArgs e)
7 {
8 //调用CreateCaret API创建光标
9 //调用SetCaretPos API设置光标位置
10 //调用ShowCaret API显示光标
11 }
12
13 /// <summary>
14 /// 当控件失去焦点时引发的事件
15 /// </summary>
16 /// <param name="sender"></param>
17 /// <param name="e"></param>
18 private void control_LostFocus(object sender, EventArgs e)
19 {
20 //调用HideCaret API隐藏光标
21 //调用DestroyCaret API清除光标
22 }
23
24
