为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > C语言课程设计鼠标控制

C语言课程设计鼠标控制

2018-03-21 13页 doc 37KB 58阅读

用户头像

is_435706

暂无简介

举报
C语言课程设计鼠标控制C语言课程设计鼠标控制 2013-2014学年 第二学期 学号 1308010115 《高级语言程序设计》 题目: 鼠标控制 专业: 计算机科学与技术 班级: 13级(1)班 姓名: 指导教师: 成绩: 计算机与信息工程系 二0一四年六月二十日 计算机与信息工程系 《高级语言程序设计》课程设计报告 目录 1设计内容及要求.........................................1 1.1鼠标简介.............................................
C语言课程设计鼠标控制
C语言课程设计鼠标控制 2013-2014学年 第二学期 学号 1308010115 《高级语言程序设计》 目: 鼠标控制 专业: 计算机科学与技术 班级: 13级(1)班 姓名: 指导教师: 成绩: 计算机与信息工程系 二0一四年六月二十日 计算机与信息工程系 《高级语言程序设计》课程设计 目录 1设计内容及要求.........................................1 1.1鼠标简介.....................................................1 1.2鼠标功能调用方法...........................................1 1.3 设计要求..................................................... 1 2设计过程或程序代码............................................1 2.1程序代码......................................................1 2.2对程序调试过程的说明......................................5 4程序运行结果.....................................................6 5小结.............................................................6 致谢...........................................................7 参考文献...........................................................7 附:源程序..........................................................7 1设计内容及要求 1.1鼠标简介 鼠标系统实际上由两个主要元素组成:鼠标机制和称作鼠标驱动程序的内存驻留程序。鼠标驱动程序提供鱼鼠标通信所需的全部低级支持。此外,它自动维持鼠标光标位置和发现是否按下了某个键。一旦装入驱动程序,鼠标就可以被随后执行的任意程序使用。可以通过PC中短33H访问鼠标和鼠标驱动程序的各种功能。所选择的特定函数依赖于中断时AX寄存器的值。三个其它寄存器(BX、CX和DX)用于把各种参数传给鼠标例程。同样,鼠标函数使用这四个寄存器把鼠标的位置和按钮的状态返回给调用函数。 1.2 鼠标功能调用方法 用TC通过INT33H中段来编制基本函数,有三种常用方法: 1. 嵌入汇编程序,如:ASM CLI清中断。 2. 利用全程变量赋予寄存器值,然后通过函数geninterrupt()调用中断 实现。 3. 利用联合类型REGS,SREGS通过函数int86(),int86x()调用中断,原 型在dos.h。 1.3设计要求 通过鼠标的初始化、鼠标光标的隐藏、鼠标光标的显示、读取鼠标的状态设置光标位置、设置鼠标光标形状、设置鼠标的移动范围编写一个简单的鼠标控制程序。 2设计过程或程序代码 2.1程序代码 鼠标的初始化 InitMouse() {union REGS regs; regs.x,ax=0; int86(0x33,®s,®s); if(regs.x.ax==0) return false; 0 计算机与信息工程系 《高级语言程序设计》课程设计报告 elese return true;} 鼠标光标的隐藏 HideCur() {union REGS regs; if(visual){ regs.x.ax=2; int86(0x33,®s,®s); visual=false; }} 鼠标光标的显示 ShowCur() {union REGS regs; if(!visual){ regs.x.ax=1; int86(0x33,®s,®s); visual=true; }} 读取鼠标的状态 Status() {union REGS regs; regs.x.ax=3; int86(0x33,®s,®s); x=regs.x.cx;y=regs.x.dx; status=regs.x.bx; } 设置光标位置 1 计算机与信息工程系 《高级语言程序设计》课程设计报告 void MoveMouse(int x,int y) {REGS regs; regs.x.ax=4; regs.x.cx=x; regs.x.dx=y; int86(0x33,®s,®s); } 设置鼠标光标形状 SetCurs(unsigned masks[32],x,y) { union REGS regs;struct SREGS sregs; regs.x.ax=9; regs.x.bx=x; regs.x.cx=y;/* hotspot*/ regs.x.dx=(unsigned)masks; segread(&stregs); int86(0x33 ®s ®s); } 设置鼠标的移动范围 SetCurs(unsigned masks[32],x,y) { union REGS regs;struct SREGS sregs; regs.x.ax=9; regs.x.bx=x; regs.x.cx=y;/* hotspot*/ regs.x.dx=(unsigned)masks; segread(&sregs); int86(0x33 ®s ®s); } 程序实例 #include #include 2 计算机与信息工程系 《高级语言程序设计》课程设计报告 #include void main() { // 初始化图形窗口 initgraph(640, 480); MOUSEMSG m; // 定义鼠标消息 while(true) { // 获取一条鼠标消息 m = GetMouseMsg(); switch(m.uMsg) { case WM_MOUSEMOVE: // 鼠标移动的时候画红色的小点 putpixel(m.x, m.y, RED); break; case WM_LBUTTONDOWN: // 如果点左键的同时按下了 Ctrl 键 if (m.mkCtrl) // 画一个大方块 rectangle(m.x-10, m.y-10, m.x+10, m.y+10); else // 画一个小方块 rectangle(m.x-5, m.y-5, m.x+5, m.y+5); 2.2对程序调试过程的说明 3 计算机与信息工程系 《高级语言程序设计》课程设计报告 鼠标光标的显示与隐藏 在鼠标驱动程序中,鼠标的显示状态用0值表示,隐藏要负值表示,每没调用一次显示功能则该值加一,每调用一次隐藏功能,则该值减一。这样,在多次调用了驱动程序的隐藏鼠标光标功能后,再调用显示鼠标光标。需要加入一个visual布尔型变量,来取代驱动程序中是的数值。 读取鼠标的状态 其中X,Y为光标位置 status&1左键状态,1为按下,0为未按 status&2右键状态,1为按下,0为未按 status&4中键状态,1为按下,0为未按 要注意循环检测时的抖动现象,可增加一些空循环或延时来清除剩余的按键信号。 设置鼠标光标形状 设置鼠标光标需要三个方面信息: 鼠标的外边界:8*8点阵,16个整数 鼠标的内部形状:8*8点阵,16个整数 以及鼠标的热点的相对坐标:int x,y 其中外边界和内边界连续存放,为长度为32的整型数组int marks[32] 4运行结果 4 计算机与信息工程系 《高级语言程序设计》课程设计报告 5小节 在这短短几个月里,我从不是完全懂TC,到能自己编出简单的菜单模型,收获了很多很多。这几个月的平均每日要花费几个小时。一些看似简单的bug,却让没有经验的我调试很久。慢慢就体会到了,那些从事编程工作的人们的辛苦。更让我觉得那些任意盗版他人作品人的可恶。自己起早贪黑做出的程序却被他人未经授权直接拿去从事商业活动。创作人员的积极性正是在这种情况下被一点一点的擦去的。编程其实和写作很像,曾经看过《疯狂的编程员》的前几章,作者说,他从来不把编程序叫作编程序,他把那称为写程序。一字之差,却不难看出程序中包含了多少编程人员的心血。这几天,我学习的对象大多是鼠标控制的图形设计,及自己去控制菜单的进入与 5 计算机与信息工程系 《高级语言程序设计》课程设计报告 返回。像同学做的汉诺塔用到的递归知识,我只是很大略的了解。而管理系统中用到的文件操作自己却更没有去细细阅读。以后这些都会补上的。 致谢 在本次实验中,要特别感谢我的知道老师陈广宏老师和组长韦小明同学,感谢陈广宏老师对我的悉心教导,传授我一些基本的c语言理论知识,组长韦小明对我在设计过程中,积极帮我解决各种问题,指出我的错误所在,帮助我把各个方面都做好。 参考文献 [1]《C程序设计》(第二版),谭浩强编,清华大学出版社,1999年12月。 [2]《C语言程序设计习题集》(第二版),陈朔鹰陈英主编,人民邮电出版社,2003年2月。 [3]《C语言趣味程序百例精解》,陈朔鹰陈英主编,北京理工大学出版社,1996年。 [4]《C语言程序设计辅导与习题集》,田淑清等,中国铁道出版社,2000年 1月。 [5]《C语言编程常见问题解答》,[美]Paul S. R. Chishohm等著,张芳妮吕波译,清华大学出版社,1996年12月。 源程序 鼠标的初始化 InitMouse() {union REGS regs; regs.x,ax=0; int86(0x33,®s,®s); if(regs.x.ax==0) return false; elese return true;} 鼠标光标的隐藏 HideCur() {union REGS regs; if(visual){ regs.x.ax=2; int86(0x33,®s,®s); visual=false; 6 计算机与信息工程系 《高级语言程序设计》课程设计报告 }} 鼠标光标的显示 ShowCur() {union REGS regs; if(!visual){ regs.x.ax=1; int86(0x33,®s,®s); visual=true; }} 读取鼠标的状态 Status() {union REGS regs; regs.x.ax=3; int86(0x33,®s,®s); x=regs.x.cx;y=regs.x.dx; status=regs.x.bx; } 设置光标位置 void MoveMouse(int x,int y) {REGS regs; regs.x.ax=4; regs.x.cx=x; regs.x.dx=y; int86(0x33,®s,®s); } 设置鼠标光标形状 SetCurs(unsigned masks[32],x,y) { union REGS regs;struct SREGS sregs; regs.x.ax=9; regs.x.bx=x; regs.x.cx=y;/* hotspot*/ regs.x.dx=(unsigned)masks; segread(&stregs); int86(0x33 ®s ®s); } 设置鼠标的移动范围 SetCurs(unsigned masks[32],x,y) { union REGS regs;struct SREGS sregs; regs.x.ax=9; regs.x.bx=x; regs.x.cx=y;/* hotspot*/ 7 计算机与信息工程系 《高级语言程序设计》课程设计报告 regs.x.dx=(unsigned)masks; segread(&sregs); int86(0x33 ®s ®s); } #include #include #include void main() { // 初始化图形窗口 initgraph(640, 480); MOUSEMSG m; // 定义鼠标消息 while(true) { // 获取一条鼠标消息 m = GetMouseMsg(); switch(m.uMsg) { case WM_MOUSEMOVE: // 鼠标移动的时候画红色的小点 putpixel(m.x, m.y, RED); break; case WM_LBUTTONDOWN: // 如果点左键的同时按下了 Ctrl 键 if (m.mkCtrl) // 画一个大方块 rectangle(m.x-10, m.y-10, m.x+10, m.y+10); else // 画一个小方块 rectangle(m.x-5, m.y-5, m.x+5, m.y+5); break; case WM_RBUTTONUP: return; // 按鼠标右键退出程序 } } // 关闭图形窗口 closegraph(); 8 计算机与信息工程系 《高级语言程序设计》课程设计报告 } 9
/
本文档为【C语言课程设计鼠标控制】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索