我正在WinForms .Net 2.0应用程序中开发类似应用程序的自定义HyperTerminal.我在Panel中有一个多行TextBox,您可以在其中与硬件设备进行交互.
我的客户希望拥有一个自定义Caret,一个填充矩形,大小为一个字符空间,而不是默认的垂直线.
我知道.Net默认情况下不提供执行此操作的选项,但必须有一些Windows功能才能执行此操作.
这些是Windows提供的Native Caret功能列表,您可以将它们用于您的应用程序.
[DllImport("User32.dll")] static extern bool CreateCaret(IntPtr hWnd, int hBitmap, int nWidth, int nHeight); [DllImport("User32.dll")] static extern bool SetCaretPos(int x, int y); [DllImport("User32.dll")] static extern bool DestroyCaret(); [DllImport("User32.dll")] static extern bool ShowCaret(IntPtr hWnd); [DllImport("User32.dll")] static extern bool HideCaret(IntPtr hWnd);
参考SharpDevelop,源代码@ src\Libraries\ICSharpCode.TextEditor\Project\Src\Gui\Caret.cs
假设一个带有文本框的表单:
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); public Form1() { InitializeComponent(); } private void Form1_Shown(object sender, EventArgs e) { CreateCaret(textBox1.Handle, IntPtr.Zero, 10, textBox1.Height); ShowCaret(textBox1.Handle); } }