日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

自定义光标样式

發(fā)布時間:2025/4/16 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自定义光标样式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

搞了兩天,終于把自定義光標(biāo)搞定了:

下面是參考資料

Windows 提供了一套對輸入光標(biāo)進(jìn)行控制的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 中的參數(shù)以此為

hWnd : 要自定義輸入光標(biāo)的控件的句柄
hBitmap : 如果使用圖片作為輸入光標(biāo),則是圖片的句柄;否則: 0 表示使用黑色的光標(biāo)色,1表示使用灰色的光標(biāo)色
nWidth:?? 光標(biāo)的寬度
nHeight: 光標(biāo)的高度
我們下面舉個例子,假設(shè):我們有個輸入框textBox2,讓這個輸入的框的光標(biāo)變成黑色的小塊

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>
??? /// 自定義輸入光標(biāo)的演示
??? /// 作者: 三角貓
??? /// 網(wǎng)址: http://www.zu14.cn/
??? /// 轉(zhuǎn)載請保留此信息
??? /// </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();
??????????? //為輸入框綁定光標(biāo)變化的處理事件
???????????? 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);
??????? }
??? }
}

?

我做的也和上面的差不多的原理,不過要自定義圖片,還是得創(chuàng)建Bitmap(BMP格式的圖片),長寬參考自身控件大小(很重要,筆者就是因?yàn)檫@個一個下午的時間沒有了),制作一張等長寬的圖片

圖片顏色要反過來,比如要顯示黑色線,就要用黑色背景,白色線,在顯示的時候,就變成黑色線了

代碼主要改動是CreateCaret(textBox2.Handle, IntPtr.Zero, 10, textBox2.Height);

改成

Bitmap bm = new Bitmap("圖片路徑")

CreateCaret(textBox2.Handle, bm.GetHbitmap(), 0,0);

?

提示:

如果是Dev的XtraGrid 則先用End事件和lose事件 ,先在事件中拿到TextEidt對象,然后用上述方法

總結(jié)

以上是生活随笔為你收集整理的自定义光标样式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。