• 沒有找到結果。

鼠标操作在实际中的应用

在文檔中 1 第 章 (頁 23-30)

DoubleClickTime_Set(tem_n); //设置鼠标的双击速度

}

自定义方法 DoubleClickTime_Set 主要用于设置鼠标的双击速度,代码如下:

public void DoubleClickTime_Set(int MouseDoubleClickTime) {

SetDoubleClickTime(MouseDoubleClickTime); //设置鼠标的双击速度

}

trackBar2 控件的 Scroll 事件,主要是在移动滑块时,根据滑块的当前位置设置鼠标的移动速度。代码如下:

private void trackBar2_Scroll(object sender, EventArgs e) {

aMouseinfo = trackBar2.Value; //记录鼠标的移动速度

SystemParametersInfo(SPI_SETMOUSE, 0, ref aMouseinfo, SPIF_UPDATEINIFILE); //设置鼠标的移动速度 }

心法领悟 014:如何移动文件夹?

移动文件夹时,需要用到 DirectoryInfo 类的 MoveTo 方法,代码如下:

DirectoryInfo DInfo = new DirectoryInfo(textBox1.Text);

string strPath = textBox2.Text + textBox1.Text.Substring(textBox1.Text.LastIndexOf("\\") + 1, textBox1.Text.Length - textBox1. Text.LastIndexOf("\\") - 1);

DInfo.MoveTo(strPath);

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

本实例使用 C#实现了隐藏和显示鼠标的功能。运行本实例,单击“隐藏鼠 标”按钮,即可将当前鼠标隐藏;通过 Tab 键将鼠标焦点移动到“显示鼠标”按 钮上,按下 Enter 键,即可将隐藏的鼠标显示出来。实例运行效果如图 1.15 所示。

本实例实现时主要用到了 API 函数 ShowCursor,下面对其进行详细介绍。

ShowCursor 函数主要用来控制鼠标指针的可视性,其声明语法如下:

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

public extern static bool ShowCursor(bool bShow); //重写 API 函数

参数说明

bShow:如果为 true,显示指针;如果为 false,则隐藏指针。

(1)打开 Visual Studio 2008 开发环境,新建一个 Windows 窗体应用程序,并将其命名为 HideMouse。

(2)更改默认窗体 Form1 的 Name 属性为 Frm_Main,在该窗体中添加两个 Button 控件,分别用来执行隐藏 鼠标和显示鼠标操作。

(3)程序主要代码如下:

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

public extern static bool ShowCursor(bool bShow); //重写 API 函数

图 1.15 隐藏和显示鼠标

private void btnHide_Click(object sender, EventArgs e) {

ShowCursor(false); //鼠标隐藏

}

private void btnShow_Click(object sender, EventArgs e) {

ShowCursor(true); //鼠标显示

}

心法领悟 015:如何修改文件夹名称?

修改文件夹名称时,需要调用 DirectoryInfo 类的 MoveTo 方法实现,代码如下:

DirectoryInfo DInfo = new DirectoryInfo(textBox1.Text);

DInfo.MoveTo(textBox1.Text.Substring(0, textBox1.Text.LastIndexOf("\\") + 1) + textBox2.Text);

开发登录窗体或者其他一些输入数据的窗体时,在一个文本框中输入内 容后,通常都需要按 Tab 键切换鼠标焦点,那么通过双击窗体能否实现类似 Tab 键的功能呢?答案是肯定的。本实例使用 C#实现了通过鼠标双击窗体时 模拟键盘 Tab 键操作的功能,实例运行效果如图 1.16 所示。

本实例实现时主要用到了 SendKeys 类的 Send 方法,下面对其进行详细 介绍。

SendKeys 类用来提供将击键发送到应用程序的方法,其 Send 方法用来向活动应用程序发送击键,该方法 的语法格式如下:

public static void Send(string keys)

参数说明

keys:要发送的击键字符串。

(1)打开 Visual Studio 2008 开发环境,新建一个 Windows 窗体应用程序,并将其命名为 MouseDoubleToTab。

(2)更改默认窗体 Form1 的 Name 属性为 Frm_Main,在该窗体中添加两个 TextBox 控件,分别用来通过 双击窗体在其中切换鼠标焦点。

(3)程序主要代码如下:

private void Form1_DoubleClick(object sender, EventArgs e) {

SendKeys.Send("{Tab}"); //转换为 Tab 键

}

心法领悟 016:如何遍历文件夹?

遍历文件夹时,首先要生成 DirectoryInfo 类的一个对象,以指定文件夹,然后生成一个 FileSystemInfo 类型 的数组,用来记录指定文件夹中的所有目录及子目录,最后,循环访问 FileSystemInfo 类型数组中的文件,并将 文件显示在 richTextBox 文本框中。

图 1.16 鼠标双击窗体时模拟 键盘 Tab 键操作

现在的很多软件都有一个通用的功能:使用鼠标拖放复制文本,该 功能使用户的输入更加方便快捷,那么该功能是如何实现的呢?本实例 将对使用鼠标拖放复制文本功能的实现过程进行详细讲解,实例运行效 果如图 1.17 所示。

本实例实现时主要用到了 TextBox 控件的 DoDragDrop 方法、DragEventArgs 类的 Data 属性和 Effect 属性以 及 DataObject 类的 GetData 方法,下面分别对它们进行详细讲解。

(1)TextBox 控件的 DoDragDrop 方法 该方法用来开始拖放操作,其语法格式如下:

public DragDropEffects DoDragDrop(Object data,DragDropEffects allowedEffects)

参数说明

 data:要拖动的数据。

 allowedEffects:DragDropEffects 枚举值之一。DragDropEffects 枚举值及说明如表 1.10 所示。

 返回值:DragDropEffects 枚举的值,它表示在拖放操作期间执行的最终效果。

表 1.10 DragDropEffects 枚举值及说明

枚 举 值 说 明

None 放置目标不接收该数据

Copy 将数据复制到放置目标

Move 将拖动源中的数据移动到放置目标

Link 将拖动源中的数据链接到放置目标

Scroll 即将在放置目标中开始滚动,或当前正在滚动

All 从拖动源复制、移除数据,并将其滚动到放置目标中

(2)DragEventArgs 类的 Data 属性

DragEventArgs 类包含与所有拖放事件(DragEnter、DragLeave、DragOver 和 Drop)相关的参数,其 Data 属性用来获取一个数据对象,该对象包含与对应拖动事件关联的数据。Data 属性的语法格式如下:

public IDataObject Data { get; }

参数说明

属性值:一个数据对象,该对象包含与对应拖动事件关联的数据。

(3)DragEventArgs 类的 Effect 属性

该属性用来获取或设置目标拖放操作,其语法格式如下:

public DragDropEffects Effects { get; set; }

参数说明

属性值:DragDropEffects 枚举值之一,指定目标拖放操作。DragDropEffects 枚举值及说明如表 1.10 所示。

(4)DataObject 类的 GetData 方法

DataObject 类的 GetData 方法用来返回与所指定数据格式关联的数据,它有 3 种重载形式,本实例中用到的 重载形式如下:

public virtual Object GetData(string format)

图 1.17 使用鼠标拖放复制文本

参数说明

 format:要检索的数据的格式。

 返回值:与指定格式关联的数据,或为 NULL。

(1)打开 Visual Studio 2008 开发环境,新建一个 Windows 窗体应用程序,并将其命名为 MouseDragTxt。

(2)更改默认窗体 Form1 的 Name 属性为 Frm_Main,在该窗体中添加两个 TextBox 控件,分别用来输入 信息和显示拖放的信息。

(3)程序主要代码如下:

private void txt1_MouseMove(object sender, MouseEventArgs e) {

if ((e.Button & MouseButtons.Left) == MouseButtons.Left) //判断是否按下鼠标左键 {

this.Cursor = new Cursor("arrow_l.cur"); //设置鼠标样式 //拖放文本

DragDropEffects dropEffect = this.txt1.DoDragDrop(this.txt1.Text, DragDropEffects.Copy | DragDropEffects.Link);

} }

private void txt2_DragDrop(object sender, DragEventArgs e) {

txt2.Text = e.Data.GetData(DataFormats.Text).ToString(); //显示拖放文本 }

private void txt2_DragEnter(object sender, DragEventArgs e) {p

e.Effect = DragDropEffects.Copy; //设置复制操作

}

心法领悟 017:如何删除文件夹?

删除文件夹时,需要用到 DirectoryInfo 类的 Delete 方法。使用 Delete 方法删除文件夹时,首先判断文件夹 是否为空,如果为空,则删除;否则将引发 IOExecption 异常。删除文件夹的代码如下:

DirectoryInfo DInfo = new DirectoryInfo(textBox1.Text);

DInfo.Delete();

在常用的画图软件中,用户一般都可以通过鼠标在其中绘图,那么该功能 是如何实现的呢?本实例将讲解如何使用 C#实现通过拖动鼠标在窗体上绘图 的功能,实例运行效果如图 1.18 所示。

本实例实现时主要用到了 Graphics 类的 DrawLine 方法和 MouseEventArgs 类的 X 属性、Y 属性,下面分别对它们进行详细介绍。

Graphics 类中的 DrawLine 方法主要用来绘制直线,该方法为可重载方法,本 实例中用到的重载形式如下:

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

参数说明

 pen:Pen 对象,它确定线条的颜色、宽度和样式。

图 1.18 利用鼠标绘图

 pt1:Point 结构,它表示要连接的第一个点。

 pt2:Point 结构,它表示要连接的第二个点。

说明:关于 MouseEventArgs 类的 X 属性和 Y 属性的详细讲解,请参见实例 005 中的关键技术。

(1)打开 Visual Studio 2008 开发环境,新建一个 Windows 窗体应用程序,并将其命名为 MouseToDraw。

(2)更改默认窗体 Form1 的 Name 属性为 Frm_Main。

(3)程序主要代码如下:

private void Form1_MouseMove(object sender, MouseEventArgs e) {

if (lastPoint.Equals(Point.Empty)) //判断绘图开始点是否为空

{

lastPoint = new Point(e.X, e.Y); //记录鼠标当前位置

}

if (G_OnMouseDown) //开始绘图

{

Point cruuPoint = new Point(e.X, e.Y); //获取鼠标当前位置

graphics.DrawLine(pen, cruuPoint, lastPoint); //绘图 }

lastPoint = new Point(e.X, e.Y); //记录鼠标当前位置

}

private void Form1_MouseUp(object sender, MouseEventArgs e) {

G_OnMouseDown = false; //开始绘图标识设置为 false

}

private void Form1_MouseDown(object sender, MouseEventArgs e) {

G_OnMouseDown = true; //开始绘图标识设置为 true

}

心法领悟 018:如何读写内存数据流?

对内存数据流进行操作时,需要使用 MemoryStream 类。MemoryStream 类创建的流以内存作为数据存储区,

而不是磁盘或网络连接。MemoryStream 类封装以无符号字节数组形式存储的数据,该数组在创建 MemoryStream 对象时被初始化,或者创建为空数组。用户可在内存中直接访问 MemoryStream 类中封装的数据。

本实例主要使用 C#实现模拟鼠标操作的功能。运行本实例,单击“单击后鼠标将自动上移”按钮,模拟鼠 标的单击操作,使鼠标位置自动上移,并弹出信息提示框。实例运行效果如图 1.19 所示。

图 1.19 模拟鼠标操作

本实例实现时主要用到了 API 函数 mouse_event,下面对其进行详细介绍。

mouse_event 函数用于模拟鼠标的事件,其声明语法如下:

[DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)]

public static extern IntPtr mouse_event(Int32 dwFlags, Int32 dx, Int32 dy, Int32 dwData, Int32 dwExtraInfo);

mouse_event 函数中的参数及说明如表 1.11 所示。 dwData 如果 dwFlags 为 MOOSEEVENTF_WHEEL,则 dwData 指定鼠标滑轮移动的数量。正值表明鼠标滑轮

向前转动,即远离用户的方向;负值表明鼠标滑轮向后转动,即朝向用户

dwExtraInfo 指定与鼠标事件相关的附加 32 位值。应用程序调用函数 GetMessgeExtraInfo 来获得此附加信息 表 1.12 dwFlags 参数的常数及说明

常 数 值 说 明

MOOSEEVENTF_ABSOLOTE 0x8000 表明参数 dx、dy 含有规范化的绝对坐标。如果不设置此处,参数含有相 对数据(相对于上次位置的改动位置)

MOOSEEVENTF_MOVE 0x0001 表明发生移动 M00SEEVENTF_LEFTDOWN 0x0002 表明按下鼠标左键 M00SEEVENTF_LEFTUP 0x0004 表明松开鼠标左键 MOOSEEVENTF_RIGHTDOWN 0x0008 表明按下鼠标右键 MOOSEEVENTF_RIGHTUP 0x0010 表明松开鼠标右键 MOOSEEVENTF_MIDDLEDOWN 0x0020 表明按下鼠标中键 MOOSEEVENTF_MIDDLEUP 0x0040 表明松开鼠标中键

MOOSEEVENTF_WHEEL 0x0800 在 Windows NT 中如果鼠标有一个轮,表明鼠标轮被移动,移动的数量由 dwData 给出

(1) 打开 Visual Studio 2008 开发环境,新建一个Windows 窗体应用程序,并将其命名为 SimulateOperateMouse。

(2)更改默认窗体 Form1 的 Name 属性为 Frm_Main,在该窗体中添加一个 Button 控件,用来在单击该控 件之后使鼠标自动上移。

(3)程序主要代码如下:

[DllImport("user32.dll")]

private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo); //引入 API 函数 mouse_event

const int MOUSEEVENTF_MOVE = 0x0001; //表示鼠标移动

const int MOUSEEVENTF_LEFTDOWN = 0x0002; //表示鼠标左键按下

const int MOUSEEVENTF_LEFTUP = 0x0004; //表示鼠标左键松开

private void button1_Click(object sender, EventArgs e) {

心法领悟 019:如何使用缓冲流?

使用缓冲流时,需要使用 System.IO 命名空间下的 BufferedStream 类,该类提供从基础数据源或存储库读取 字节以及将字节写入基础数据源或存储库的实现,在不需要缓冲区时,防止缓冲区降低输入和输出速度。缓冲 区是内存中的字节块,主要用于缓冲数据,从而减少对操作系统的调用次数。

用户在对桌面进行操作时,为了使桌面更加美观,可以在桌面的上面加一层类似于玻璃的效果,用户可以用 鼠标透过“玻璃”对桌面进行操作。本实例通过使用鼠标穿透窗体实现以上功能,实例运行效果如图 1.20 所示。

图 1.20 实现鼠标穿透窗体

本实例实现时主要用到了 API 函数 SetWindowLong 和 GetWindowLong,下面分别对它们进行详细介绍。

(1)SetWindowLong 函数

该函数主要用于在窗口结构中为指定的窗口设置信息,其声明语法如下:

[DllImport("user32", EntryPoint = "SetWindowLong")]

private static extern uint SetWindowLong(IntPtr hwnd, int nIndex, uint dwNewLong);

参数说明

 hwnd:IntPtr,欲为其取得信息的窗口的句柄。

 hwnd:IntPtr,欲为其取得信息的窗口的句柄。

在文檔中 1 第 章 (頁 23-30)

相關文件