首页 > 代码库 > C#/VB.NET Winform程序自定义输入光标
C#/VB.NET Winform程序自定义输入光标
本文转载自真有意思网(http://www.zu14.cn)
作者:三角猫 DeltaCat
摘要:C#/VB.NET Winform程序自定义输入光标的实现,我们可以通过调用Windows 提供的一套对输入光标进行控制的API进行操作......
作者:三角猫 DeltaCat
摘要:C#/VB.NET Winform程序自定义输入光标的实现,我们可以通过调用Windows 提供的一套对输入光标进行控制的API进行操作......
Windows 提供了一套对输入光标进行控制的API, 包括:CreateCaret,SetCaretPos,DestroyCaret,ShowCaret,HideCaret。这些API的定义如下:
[DllImport("user32.dll")]static extern bool CreateCaret(IntPtr hWnd, IntPtr hBitmap, int nWidth, int nHeight);[DllImport("user32.dll")]static extern bool ShowCaret(IntPtr hWnd);[DllImport("User32.dll")]static extern bool HideCaret(IntPtr hWnd);[DllImport("User32.dll")]static extern bool SetCaretPos(int x, int y);[DllImport("user32.dll")]static extern bool DestroyCaret();
上面的 CreateCaret 中的参数以此为
- hWnd : 要自定义输入光标的控件的句柄
- hBitmap : 如果使用图片作为输入光标,则是图片的句柄;否则: 0 表示使用黑色的光标色,1表示使用灰色的光标色
- nWidth: 光标的宽度
- nHeight: 光标的高度
我们下面举个例子,假设:我们有个输入框textBox2,让这个输入的框的光标变成黑色的小块
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;namespace CustomCaret{ /// <summary> /// 自定义输入光标的演示 /// 作者: 三角猫 /// 网址: http://www.zu14.cn/ /// 转载请保留此信息 /// </summary> public partial class Form1 : Form { [DllImport("user32.dll")] static extern bool CreateCaret(IntPtr hWnd, IntPtr hBitmap, int nWidth, int nHeight); [DllImport("user32.dll")] static extern bool ShowCaret(IntPtr hWnd); [DllImport("User32.dll")] static extern bool HideCaret(IntPtr hWnd); [DllImport("User32.dll")] static extern bool SetCaretPos(int x, int y); [DllImport("user32.dll")] static extern bool DestroyCaret(); public Form1() { InitializeComponent(); //为输入框绑定光标变化的处理事件 this.textBox2.GotFocus += new EventHandler(textBox2_GotFocus); this.textBox2.LostFocus += new EventHandler(textBox2_LostFocus); } void textBox2_LostFocus(object sender, EventArgs e) { HideCaret(this.textBox2.Handle); DestroyCaret(); } void textBox2_GotFocus(object sender, EventArgs e) { CreateCaret(textBox2.Handle, IntPtr.Zero, 10, textBox2.Height); ShowCaret(textBox2.Handle); } }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。