1、鼠标控制学号2014-2015学年 第二学期1308210101高级语言程序设计课程设计报告题目:鼠标控制专业:计算机科学与技术班级:13计科2班姓名:鲍超指导教师:樊郁徽成绩:计算机学院2015 年 6月 15 日目 录1设计内容及要求 21.1 概述 21.2 主要功能 31.3 目的和要求 32概要设计 32.1数据结构 31、获取鼠标光标在屏幕上的位置 32、移动鼠标光标、按下和放下鼠标键 32.2 软件结构 42.2.1主要功能模块 42.2.2程序总体框图 52.2.3各模块之间的关系 53设计过程或程序代码 63.1主函数的程序流程图 63.2对关键代码进行分析和说明 74设计结
2、果与分析 124.1程序运行结果截图 125参考文献 156小结 151设计内容及要求1.1 概述鼠标器作为一种输入设备以其方便灵活的特点,在计算机应用中越来越受到人们的广泛欢迎。设计鼠标就是为了简化键盘操作的烦琐,从而提高工作效率。在程序设计中,若能使用鼠标功能,不但能改善用户界面,还会使程序具有专业水平的味道。利用C语言控制鼠标可以完成许多操作,比如说修改鼠标的光标形状,控制鼠标的移动,利用鼠标画图等等。现在,在市场上已经有许多控制鼠标的成熟软件,比如说“按键精灵”,而且鼠标控制程序也应用于游戏的开发。1.2 主要功能1、鼠标左右键转换 2、判断鼠标的操作类型3、输出鼠标当前坐标信息4、鼠
3、标经过位置打印字符1.3 目的和要求 目的:主要利用c语言鼠标控制能力独立设计并开发出一个小型的关于鼠标控制的基本功能集成系统,系统具有如下功能:鼠标键位转换、判断鼠标的操作类型,在鼠标经过位置打印字符。要求:系统以菜单方式工作,根据菜单项序号提示进行工作。实现对鼠标的基本控制等功能。 2概要设计2.1数据结构1、获取鼠标光标在屏幕上的位置 需调用API函数GetCursorPos,GetCursorPos函数把鼠标光标的当前位置存储到结构变量Point中。结构变量的定义如下:Typedef struct tagPOINTLONG mouseoposx;LONG mouseoposy;POIN
4、T;2、移动鼠标光标、按下和放下鼠标键 typedef struct _MOUSE_EVENT_RECORD /鼠标事件结构体 COORD dwMousePosition; /当前鼠标在控制台窗口缓冲区的位置 DWORD dwButtonState; /鼠标按键的状态 DWORD dwControlKeyState; /控制键状态 DWORD dwEventFlags; /鼠标事件类型 MOUSE_EVENT_RECORD; (1)其中鼠标按键状态dwButtonState可能的值:FROM_LEFT_1ST_BUTTON_PRESSED /最左边的鼠标键被按下,一般来说就是鼠标左键 FROM
5、_LEFT_2ND_BUTTON_PRESSED /左起第二个鼠标键被按下, 一般来说是鼠标中键,就是滚轮键 FROM_LEFT_3RD_BUTTON_PRESSED /左起第三个鼠标键被按下 FROM_LEFT_4TH_BUTTON_PRESSED /左起第四个鼠标键被按下 RIGHTMOST_BUTTON_PRESSED /最右边的鼠标键被按下 (2)鼠标事件类型dwEventFlags有以下几种:DOUBLE_CLICK /双击,第一击只作为普通按键事件,第二击才作为双击事件 MOUSE_HWHEELED /水平鼠标滚轮移动 MOUSE_MOVED /鼠标移动 MOUSE_WHEELED
6、 /垂直鼠标滚轮移动 0 /当鼠标有键被按下或者释放 2.2 软件结构 2.2.1主要功能模块本系统除了主函数之外,还有8个函数模块,实现3个主要功能,以下为8个函数模块: 1、头部时间信息模块:用于显示程序的辅助信息,在系统初始化界面显示系统当前时间。2、用户选择信息模块:本函数用于显示用户在刚进入系统中选择要操作的功能序号模块3、判断动作模块:本函数用于判断鼠标点击的状态4、判断鼠标操作类型功能模块:从判断鼠标动作模块中返回操作状态值,由此给用户反馈操作信息5、鼠标经过位置打印字符:本函数根据鼠标的移动的轨迹,打印指定字符6、鼠标左右键转换模块:本函数用于转换鼠标的左右键7、设置鼠标位置模
7、块:根据所传入的坐标信息,将鼠标移至坐标处8、显示鼠标坐标信息模块:本函数用于在控制台底部显示当前鼠标的坐标位置信息 2.2.2程序总体框图图2.2.2-A程序总体框图2.2.3各模块之间的关系该系统的主要功能是实现对鼠标的简单应用与控制,其中包括三个核心功能,一是实现鼠标的左右键置换功能;二是判断鼠标操作类型的功能,程序可以根据用户的点击来判断鼠标的操作类型,然后给用户提示信息;三是利用鼠标进行打印字符操作。各个模块之间的关系是相互联系的。首先,主函数调用了头部时间信息函数和用户输入菜单函数。用户输入功能所对应的序号,程序自动连接到指定的功能模块。子函数之间也是有联系的,比如,判断鼠标类型操
8、作模块调用了鼠标的判断点击状态函数,还有,鼠标进过位置打印字符模块调用了设置鼠标位置的函数和显示鼠标位置信息函数。3设计过程或程序代码3.1主函数的程序流程图1、主函数程序(N-S)流程图及运行界面主函数程序(N-S)流程图(见图3.1-A)主函数main()调用选择信息提示模块scanf(%d,&select)switch(select)case 1 :zhuanhuan();break; 鼠标左右键转换case 2 :judge();break; 判断鼠标的操作类型case 3 :painting();break; 判断鼠标的操作类型case 4 :exit(0);break; 鼠标经过位
9、置打印字符default : printf(选择错误n);图3.1-A主函数程序简单说明:该功能主要显示的是给用户一个进入界面,它主要的是显示该程序主要能够执行的有哪些功能。下面是显示给用户的界面。(见图3.1-B) 2、主函数程序运行界面图3.1-B主函数界面3.2对关键代码进行分析和说明1、鼠标左右键的转换void zhuanhuan()char c;SwapMouseButton(TRUE); /设置鼠标键位转换 printf(ntt是否切换为原始状态Y/N:); fflush(stdin); scanf(%c,&c); while(1) if(c=Y | c=y) SwapMouseB
10、utton(FALSE); /设置鼠标键位转换 break; else if(c=N | c=n) printf(ntt是否切换为原始状态Y/N:); fflush(stdin); scanf(%c,&c); printf(ntt设置成功!:);2、判断鼠标点击类型int input() int X,Y; while(1) COORD pos = 0,0; ReadConsoleInput(handle_in, &mouserec, 1, &res); pos = mouserec.Event.MouseEvent.dwMousePosition; Y=(int)pos.Y; X=(int)p
11、os.X; if (mouserec.EventType = MOUSE_EVENT & mouserec.Event.MouseEvent.dwEventFlags = RIGHTMOST_BUTTON_PRESSED) /* 鼠标左键双击 */ return 1; if (mouserec.EventType = MOUSE_EVENT & mouserec.Event.MouseEvent.dwButtonState = RIGHTMOST_BUTTON_PRESSED) /* 鼠标右键单击 */ return 2; if (mouserec.EventType = MOUSE_EVEN
12、T & mouserec.Event.MouseEvent.dwButtonState = FROM_LEFT_1ST_BUTTON_PRESSED) /* 鼠标左键单击 */ if(X=1&X=1&X80 & Y=27) /* 控制台第二行 */ return 4; 3、判断鼠标操作类型 void judge() int rt; handle_in = GetStdHandle(STD_INPUT_HANDLE); /获得标准输入设备句柄 handle_out = GetStdHandle(STD_OUTPUT_HANDLE); /获得标准输出设备句柄 INPUT_RECORD mouser
13、ec; /定义输入事件结构体 DWORD res; /用于存储读取记录 COORD pos=0,0; /用于存储鼠标当前位置 pos = mouserec.Event.MouseEvent.dwMousePosition; /获得当前鼠标位置 gotoxy(0, 50); /在第50行显示鼠标位置 HWND hwnd=FindWindow(ConsoleWindowClass,NULL); / 控制台窗口句柄 while(1) ReadConsoleInput(handle_in, &mouserec, 1, &res); /读取1个输入事件 switch(mouserec.EventType
14、) case MOUSE_EVENT: rt=input(); switch(rt) case 1: MessageBox(hwnd,双击操作,操作,0); /弹出对话框 break; case 2: MessageBox(hwnd,右键单击,操作,0); /弹出对话框 break; case 3: MessageBox(hwnd,左键单击第一行,操作,0); /弹出对话框 break; case 4: MessageBox(hwnd,左键单击第二行,操作,0); /弹出对话框 break; break; 4、在鼠标经过的位置打印字符void painting() handle_in = GetStdHandle(STD_INPUT_HANDLE); handle_out =
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1