鼠标的操作控制:

  鼠标是计算机的一个重要组成部分,有很多默认的设置,如双击时间间隔,闪烁频率,移动速度等,本篇使用C#获取这些基本的信息。

1.1获取鼠标信息

①实例001 获取鼠标双击时间间隔

主要用到的API函数为GetDoubleClickTime。函数主要用来判断连续2次鼠标单击之间会被处理成双击的时间间隔。

主要程序代码如下:

         [DllImport("user32.dll", EntryPoint = "GetDoubleClickTime")]

         public static extern int GetDoubleClickTime();

         private void Frm_Main_Load(object sender, EventArgs e)
{ label1.Text = GetDoubleClickTime() + "毫秒";
}

②实例002 获取光标闪烁频率

主要用到的API函数为GetCaretBlinkTime,获取光标闪烁的时间,返回值为int类型,毫秒为单位。

         [DllImport("user32.dll", EntryPoint = "GetCaretBlinkTime")]

         public static extern int GetCaretBlinkTime();

         private void Frm_Main_Load(object sender, EventArgs e)
{ label1.Text = GetCaretBlinkTime() + "毫秒";
}

③实例003 获取鼠标键数

鼠标种类多种多样,除了左右键,还有滚轮,有的带功能键,主要用到的API函数为GetSystemMetrics,intcount指定欲获取的信息。

         public const int SM = ;

         [DllImport("user32.dll", EntryPoint = "GetSystemMetrics")]

         public static extern int GetSystemMetrics(int intcount);

         private void Frm_Main_Load(object sender, EventArgs e)
{
int intCon = GetSystemMetrics(SM);
label1.Text = "鼠标键数" + intCon + "个";
}

④实例004 显示鼠标等待光圈

主要用到了Form类的Cursor属性,Cursor属性主要用来获取或设置当鼠标指正位于窗体上时显示的光标。

         private void Frm_Main_Load(object sender, EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
}

⑤获取鼠标在窗体上的位置

获取鼠标位置在开发过程中很重要,通过单击鼠标获取鼠标的当前位置。主要用到MouseEventArgs类的X和Y属性,MouseEventArgs类为MouseUp、MouseDown、MouseMove事件提供数据。

         private void Frm_MouseDown(object sender, MouseEventArgs e)
{
this.label1.Text = e.X.ToString;
this.label2.Text = e.Y.ToString;
}

1.2鼠标基本设置

①鼠标指针形状

鼠标的指针经常会有多种样式,如“等待”,打开链接的“小手”。本实例是将鼠标放到label上显示小手。

       this.label1.Cursor = Cursors.Hand;

②鼠标的图形样式

用户使用鼠标时,为了美观,自定义鼠标图片。

         private void button1_Click(object sender, EventArgs e)
{
this.Cursor = new Cursor("pen_il.cur"); //改变鼠标图片
}

③左右键互换功能

在控制面板中,用户可以对鼠标做相应的设置,在这里左右键互换用到的API函数为SwapMouseButton。在SwapMouseButton()中,返回为真交换左右键,否则恢复正常。

         [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SwapMouseButton")]

         public static extern int SwapMouseButton(int bSwap);

         public void DefultRightButton()
{
SwapMouseButton();
}
public void DefultLeftButton()
{
SwapMouseButton();
} private void button1_Click(object sender, EventArgs e)
{
this.DefultLeftButton();
}
private void button2_Click(object sender, EventArgs e)
{
this.DefultRightButton();
}

④固定鼠标控制区域

在实际应用中,有时候要限制鼠标的移动区域,让其只能在某一区域移动。

         private void button1_Click(object sender, EventArgs e)
{
this.Cursor = new Cursor(Cursor.Current.Handle);
Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y);
Cursor.Clip = new Rectangle(this.Location, this.Size);
}
private void button2_Click(object sender, EventArgs e)
{
Screen[] screens = Screen.AllScreens;
this.Cursor = new Cursor(Cursor.Current.Handle);
Cursor.Clip = screens[].Bounds;
}

1.3鼠标操作在实际中的应用

①隐藏鼠标按钮

在实际应用中,有时候会将鼠标隐藏,通过使用键盘来操作。主要用到的API函数是ShowCursor。ShowCursor(bool bShow);bshow为true显示指针,如果为false隐藏指针。

         [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "ShowCursor")]
public static extern bool ShowCursor(bool bShow); private void button1_Click(object sender, EventArgs e)
{
ShowCursor(false);//隐藏鼠标
}
private void button2_Click(object sender, EventArgs e)
{
ShowCursor(true);//显示鼠标
}

②通过双击窗体模拟按键tab操作

通常我们在一个文本框中输入完成时,会按tab切换到下一个文本框,能否通过双击窗体实现。主要用到的是SendKey类中的Send方法向活动发送按键操作。

         private void Frm_DoubleClick(object sender, EventArgs e)
{
SendKeys.Send("{Tab}");
}

③利用鼠标绘图

通过鼠标绘制图形,主要用到Graphics类中的DrawLine方法和MouseEventArgs类的X,Y属性,DrawLine方法主要用来绘制直线,该方法可被重载,这里用到的重载形式为

public void DrawLine(Pen pen,Point pt1,Point pt2)

pen:为Pen对象,确定线条的颜色、宽度、样式

pt1,pt2为2个点

         private bool G_OnMouseDown;
private Graphics g;
private Pen pen = new Pen(Color.Blue, );
private Point CPoint,lastPoint; [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "ShowCursor")]
public static extern bool ShowCursor(bool bShow);
private void Form1_MouseMove(object sender, MouseEventArgs e)
{ if (lastPoint.Equals(Point.Empty))
{
lastPoint = new Point(e.X, e.Y);
}
if (G_OnMouseDown)
{
Graphics g = this.CreateGraphics();
CPoint = new Point(e.X, e.Y);
g.DrawLine(pen, CPoint, lastPoint);
g.Dispose();
}
lastPoint = new Point(e.X, e.Y);
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
G_OnMouseDown = true;
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
G_OnMouseDown = false;
// this.Refresh();
}

④使窗体始终在其他窗口之上

有时候播放视频的时候,播放器会始终在桌面最顶端,主要用到的是TopMost,以及任务栏不显示ShowInTaskbar设置为true。

         private void Frm_Main_Load(object sender, EventArgs e)
{
this.ShowInTaskbar = false;//在任务栏不显示
CanPenetrate();
this.TopMost = true;//始终在顶层
}

C#开发实例 鼠标篇的更多相关文章

  1. C#开发实例 键盘篇

    键盘的操作控制: 键盘和鼠标一样是重要输入设备的一部分.开发过程中,会涉及到很多的键盘操作控制. 2.1获取键盘信息 ①获取组合键 Windows中有很多默认的组合键,如Ctrl+v,Ctrl+A.本 ...

  2. Bluetooth篇 开发实例之九 和蓝牙模块通信

    首先,我们要去连接蓝牙模块,那么,我们只要写客户端的程序就好了,蓝牙模块就相当于服务端. 连接就需要UUID. #蓝牙串口服务SerialPortServiceClass_UUID = ‘{00001 ...

  3. jquery mobile自己定义webapp开发实例(一)——前言篇

    用jquery mobile做了一段时间的webapp开发,准备用自己的一个小demo做一个模块化的分享 点击demo演示 手机演示二维码: 此demo已经是比較老的版本号,用户体验流畅度确实还存在非 ...

  4. Bluetooth篇 开发实例之八 匹配

    自己写的App匹配蓝牙设备,不需要通过系统设置去连接. 匹配和通信是两回事. 用过Android系统设置(Setting)的人都知道蓝牙搜索之后可以建立配对和解除配对,但是这两项功能的函数没有在SDK ...

  5. C#软件开发实例.私人订制自己的屏幕截图工具(七)加入放大镜的功能

    上一篇:C#软件开发实例.私人订制自己的屏幕截图工具(六)加入配置管理功能 因为截图时可能须要精确截取某一部分,所以须要放大镜的功能,这样截取的时候才更easy定位截图的位置. 加入PictureBo ...

  6. Winform常用开发模式第一篇

    Winform常用开发模式第一篇 上一篇博客最后我提到“异步编程模型”(APM),之后本来打算整理一下这方面的材料然后总结一下写篇文章与诸位分享,后来在整理的过程中不断的延伸不断地扩展,发现完全偏离了 ...

  7. Cocos2d-x 3.X手游开发实例详解

    Cocos2d-x 3.X手游开发实例详解(最新最简Cocos2d-x手机游戏开发学习方法,以热门游戏2048.卡牌为例,完整再现手游的开发过程,实例丰富,代码完备,Cocos2d-x作者之一林顺和泰 ...

  8. Express开发实例(2) —— Jade模板引擎

    前一篇通过helloworld,简单介绍了Express中的开发,本篇继续深入的学习express的模板. 关于Jade的用法,网上有很多,本篇参考:Jade语法 安装相关模块 在实验代码前,应该先安 ...

  9. RDIFramework.NET开发实例━表约束条件权限的使用-Web

    RDIFramework.NET开发实例━表约束条件权限的使用-Web 在上一篇文章“RDIFramework.NET开发实例━表约束条件权限的使用-WinForm”我们讲解了在WinForm下表约束 ...

随机推荐

  1. 如何申请TexturePacker

    对于很多做手机游戏的和用starling做页游的盆友,对TexturePacker应该并不陌生,但是呢,能免费申请注册码你造吗,你想要吗,TexturePacker的作者Adreas是个好人,只要你R ...

  2. .net,微软,薪资及其他

    很久没在博客园上写些东西,因为我的确没有什么技术上面新奇的心得和大家分享,园子里面的文章页没啥看的,基本就是看一下业界新闻,因为这里面99%的东西没什么看头,更像是个人技术笔记汇总. 我从07年从de ...

  3. 编写高质量代码改善C#程序的157个建议[为类型输出格式化字符串、实现浅拷贝和深拷贝、用dynamic来优化反射]

    前言 本文已更新至http://www.cnblogs.com/aehyok/p/3624579.html .本文主要学习记录以下内容: 建议13.为类型输出格式化字符串 建议14.正确实现浅拷贝和深 ...

  4. JS面向对象高级特性

    本篇是通过学习视频<一头扎进javascirpt高级篇>整理的一些相关知识,大致包括下面几个方面: 1 对象的创建方法 2 对象的对象属性.私有属性.类属性 3 对象的对象方法.私有方法. ...

  5. “耐撕”团队2016.05.11站立会议

    1. 时间 18:15--18:35     共计20分钟 2. 人员 Z 郑蕊 * 组长 (博客:http://www.cnblogs.com/zhengrui0452/), P 濮成林(博客:ht ...

  6. /WEB-INF/userManage.jsp(31,82) Unterminated ${ tag

    这个错误是说明${}少写了一半. Unterminated有这个的意思是你的jsp语法有错误

  7. poj2528 线段树+离散化

    由于坐标可能很大,此时需要离散化,将值转化为对应的坐标. #include<stdio.h> #include<algorithm> using namespace std; ...

  8. 【UVA 1583】Digit Generator

    题 题意 a加上 a的各位数=b,则b是a的digitSum,a是b的generator,现在给你digitSum,让你求它的最小的generator. 分析 一种方法是: 预处理打表,也就是把1到1 ...

  9. 蝙蝠算法-python实现

    BAIndividual.py import numpy as np import ObjFunction class BAIndividual: ''' individual of bat algo ...

  10. 【BZOJ-1449&2895】球队收益&球队预算 最小费用最大流

    1449: [JSOI2009]球队收益 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 648  Solved: 364[Submit][Status][ ...