C#/VB.NET Winform程序自定义输入光标

本文转载自真有意思网(http://www.zu14.cn)

作者:三角猫 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);
        }
    }
}

C#/VB.NET Winform程序自定义输入光标,布布扣,bubuko.com

时间: 2024-08-06 07:50:52

C#/VB.NET Winform程序自定义输入光标的相关文章

在.net桌面程序中自定义鼠标光标

有的时候,一个自定义的鼠标光标能给你的程序增色不少.本文这里介绍一下如何在.net桌面程序中自定义鼠标光标.由于.net的桌面程序分为WinForm和WPF两种,这里分别介绍一下. WinForm程序 对于WinForm程序,可以通过修改Control.Cursor属性来实现光标的修改,如果我们有光标文件的话,可以直接通过如下代码实现自定义光标: this.Cursor = new Cursor("myCursor.cur"); 但这种方式不是本文介绍的重点,本文主要介绍如何自己绘制光

c#Winform程序的toolStripButton自定义背景应用示例源码

C# Winform程序的toolStrip中toolStripButton的背景是蓝色的,如何改变背景及边框的颜色和样式呢? 实现此功能需要重写toolStripButton的Paint方法 这里只是给出解决问题的思路和方法,如下图,当鼠标移到按钮上,背景会变为黑色 实现代码如下: ToolStripButton tsb = (ToolStripButton)sender; Rectangle rectButton = tsb.Bounds; Point p = toolStrip1.Poin

吉特仓库管理系统(开源)-如何在网页端启动WinForm 程序

原文:吉特仓库管理系统(开源)-如何在网页端启动WinForm 程序 在逛淘宝或者使用QQ相关的产品的时候,比如淘宝我要联系店家点击旺旺图标的时候能够自动启动阿里旺旺进行聊天.之前很奇怪为什么网页端能够自动启动客户端程序,最近在开发吉特仓储管理系统的时候也遇到一个类似的问题,因为使用网页端的打印效果并不是太好,之前也写过关于打印相关的文章可以查阅,我需要使用WinForm客户端来驱动打印,但是我又不想重新开发Winform客户端的所有功能,只要能够使用winform驱动打印即可.我就需要一个类似

WinForm TextBox自定义扩展方法数据验证

本文转载:http://www.cnblogs.com/gis-crazy/archive/2013/03/17/2964132.html 查看公司项目代码时,存在这样一个问题:winform界面上有很多信息填写,提交后台服务器更新,但数据的合法验证及值的转换却不太敢恭维,一堆的if判断和转换,便想着是否能扩展个方法出来,琢磨出个思路,记录下来与大家共同探讨,有不对的地方还请大家指正. 设计思路: 1. 由于大部分从TextBox控件中获取数据值,可以扩展个泛型方法出来,直接根据转换后的数据类型

VS2012打包部署Winform程序[转]

http://blog.sina.com.cn/s/blog_7c99e6bf0101dx02.html VS2012打包部署Winform程序 打包前的准备工作: 新建一个打包部署项目,点OK,如果是第一次使用的话,会打开一个网页,按照提示的步骤来做, 点击上面的step2的网址,进入到另一个网页: 填写完右边的信息,点击“download now”即会收到一封邮件,里面有下载地址和激活码. 点击上面的连接进行下载,会下载到一个名为:InstallShield2012SPRLimitedEdi

C#Winform程序如何发布并自动升级(图解)

有不少朋友问到C#Winform程序怎么样配置升级,怎么样打包,怎么样发布的,在这里我解释一下打包和发布 关于打包的大家可以看我的文章C# winform程序怎么打包成安装项目(图解) 其实打包是打包,发布是发布两者是没有任何关系的,只是有些同志会分不清楚.混在一起了. 下在面大家就和我一起来做一个发布并升级的程序吧. 首先我们准备几个工作 1.新建一个存储发布后程序的目录比如D:\iis\textWinform  以下简称-- 发布目录 2.在IIS新建一个网站并指向目录D:\iis\auto

黄聪:C#Winform程序如何发布并自动升级(图解)

有不少朋友问到C#Winform程序怎么样配置升级,怎么样打包,怎么样发布的,在这里我解释一下打包和发布关于打包的大家可以看我的文章C# winform程序怎么打包成安装项目(图解)其实打包是打包,发布是发布两者是没有任何关系的,只是有些同志会分不清楚.混在一起了.下在面大家就和我一起来做一个发布并升级的程序吧.首先我们准备几个工作1.新建一个存储发布后程序的目录比如D:\iis\textWinform  以下简称-- 发布目录2.在IIS新建一个网站并指向目录D:\iis\autoWinfro

web页面启动winform程序

本文实现的需求是: A.通过web页面启动winform程序: B.将页面的参数传递给winform程序: C.winform程序已经启动并正在运行时,从web页面不能重新启动winform程序, 只是当传入winform程序的参数更改时,winform上显示的数据作出相应的更新. 具体实现如下: 1.页面html代码 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w

在C# WinForm程序中创建控件数组及相应的事件处理

控件数组是VB提供的一个优秀的设计解决方案,它能很方便快捷的处理大批同类控件的响应和时间处理,但不知为什么在C#中这个优秀特性没有传承下来,甚为可惜,本文将要探讨就是如何在C# WinForm程序实现它.首先请看界面 在上面的界面中,本人想实现一个42个元素的Button数组来实现一个日历的功能,上面显示出了一部分. 其中采用了网格布局来放置这些按钮.手工创建为全部按钮后,在窗体类中代码中定义成员变量控件数组: private Button[] btns;然后在构造函数中初始化: btns =