Dev.Hong
将欲取之 必先予之……
随笔- 53  文章- 0  评论- 220 
博客园  首页  新随笔  联系  管理  订阅 订阅
自定义文本编辑控件中的光标控制
在编写文本编辑控件时,对于光标的控制,需要用到 CreateCaret,SetCaretPos,DestroyCaret,ShowCaret,HideCaret API

 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

设置控件   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 
posted on 2007-05-12 14:31 Dev.Hong 阅读(1024) 评论(1) 编辑 收藏
刷新评论刷新页面返回顶部
程序员问答社区,解决您的IT难题
博客园首页博问新闻闪存程序员招聘知识库
Copyright ©2012 Dev.Hong