API编程实现.doc_第1页
API编程实现.doc_第2页
API编程实现.doc_第3页
API编程实现.doc_第4页
API编程实现.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验课程名称:visul c+面向对象与可视化编程试验项目名称api编程实现实验成绩实验者专业班级组别同组者试验日期11年4月14日第一部分:实验分析与设计一、 实验内容描述(问题与描述) 设计一个键盘程序,当按ctrl键时,表明要画椭圆;当按shift键时,表明要画矩形。然后单击有箭头键,椭圆或矩形的长度加10;单击向下箭头时,椭圆和矩形的高度加10;单击home键时,整个椭圆或矩形向左运动;单击end键时,整个椭圆或矩形向右运动;单击pageup键时,整个圆形或矩形向上运动;单击pagedown键时,整个圆形或矩形向下运动。下图为画图后依据上述操作把圆移到中间位置的情形。效果示意图二、 实验原理与设计(包括实验方案设计、实验手段的确定、实验步骤等,用硬件逻辑或算法描述)扫描码是依赖于具体设备的,为达到设备无关性的要求,往往使用与具体设备无关的虚拟码,虚拟码是由windows系统定义的与设备无关的键的标识。虚拟码是一种与设备无关的键盘编码,它的值存放在键盘消息的wparam参数中,用以标识哪一个键被按下或释放,最常用的虚拟码已经在windows.h中定义。操作系统在接收到键盘输入后把消息发送给具有“输入焦点(input focus)的窗口。应用程序一般有几个窗口,但当按下某一个键时,只有一个窗口能接收到该键盘消息,接收这个键盘消息的窗口称为有“输入焦点”的窗口。在winmain函数的消息循环中包含了translatemessage函数,其功能是把按键消息转化为字符消息,但只有当键盘驱动程序把键盘字符映射成ascii码后才能产生wm_char消息。鼠标作为定位输入设备,通过鼠标单击、双击和拖动功能,用户可以很容易地操作基于windows图形界面的应用程序。 windows中通过光标来指示当前鼠标的位置,在windows操作系统中预定义了几种光标,并在windows.h头文件中加以定义。三、 主要仪器设备与耗材个人计算机第二部分:实验调试与结果分析一、 调试过程(包括试验方法描述、实验数据记录、实验现象记录、实验过程发现的问题等)源代码:#include #include #include long winapi wndproc(hwnd hwnd,uint imessage,uint wparam,long lparam);/消息处理函数声明.bool initwindowsclass(hinstance hinstance);/初始化窗口类声明bool initwindows(hinstance hinstance, int ncmdshow);/初始化窗口声明.hwnd hwndmain;/定义全局窗口句柄.rect rect1;/定义矩形结构体.记录了图形的信息.int winapi winmain(hinstance hinstance, hinstance hprevinstance, lpstr lpcmdline, int ncmdshow)/主函数msg message;if(!initwindowsclass(hinstance)/初始化窗口类.return false;if(!initwindows(hinstance,ncmdshow)/初始化窗口.return false;while(getmessage(&message,0,0,0)translatemessage(&message);/消息循环.dispatchmessage(&message);return message.wparam;long winapi wndproc(hwnd hwnd,uint imessage,uint wparam,long lparam)/消息处理函数.hdc hdc;/定义设备环境句柄.static bool bcircle=false,brect=false;/设置绘制圆和矩形的标志变量.paintstruct ps;/定义绘图结构体变量.switch(imessage)case wm_keydown:if(wparam = vk_control)/按下ctrl键时.bcircle = true;/画圆.brect = false;rect1.left = 0;/初始化矩形结构体.rect1.right = 0;rect1.top = 0;rect1.bottom = 0;else if(wparam = vk_shift)/按下shift键时.brect = true;/画矩形.bcircle = false;rect1.left = 0;/初始化矩形结构体.rect1.right = 0;rect1.top = 0;rect1.bottom = 0;else if(wparam = vk_right)rect1.right +=10;/按下右箭头时矩形框长度加10.if(brect = true | bcircle = true)invalidaterect(hwnd,null,true);/发出重绘信息.else if(wparam = vk_down)rect1.bottom +=10;/按下下箭头矩形框高度加10.if(brect = true | bcircle = true)invalidaterect(hwnd,null,true);/发出重绘信息.else if(wparam = vk_prior)/按pageup键时,向上移动.rect1.top -=10;rect1.bottom -=10;if(brect = true | bcircle = true)invalidaterect(hwnd,null,true);/发出重绘信息.else if(wparam = vk_next)/按pagedown键,向下移动.rect1.top +=10;rect1.bottom +=10;if(brect = true | bcircle = true)invalidaterect(hwnd,null,true);/发出重绘信息.else if(wparam = vk_home)/按home键,向左移动.rect1.left -=10;rect1.right -=10;if(brect = true | bcircle = true)invalidaterect(hwnd,null,true);/发出重绘信息.else if(wparam = vk_end)/按end键,向右移动.rect1.left +=10;rect1.right +=10;if(brect = true | bcircle = true)invalidaterect(hwnd,null,true);/发出重绘信息.break;case wm_paint:hdc = beginpaint(hwnd,&ps);if(bcircle = true)/绘制圆形.ellipse(hdc,rect1.left,rect1.top,rect1.right,rect1.bottom);if(brect = true)/绘制矩形.rectangle(hdc,rect1.left,rect1.top,rect1.right,rect1.bottom);endpaint(hwnd,&ps);break;case wm_destroy:/处理退出窗口信息.postquitmessage(0);return 0;default:return(defwindowproc(hwnd,imessage,wparam,lparam);return 0;bool initwindows(hinstance hinstance, int ncmdshow)hwnd hwnd;hwnd=createwindow(6_4,/窗口类名称.鼠标显示实例程序, /标题栏名称.ws_overlappedwindow,/窗口样式.有标题栏和最大最小化按钮.cw_usedefault,/窗口左上角坐标.0,cw_usedefault,/采用缺省的高度和宽度.0,null,/无父窗口.null,/无菜单.hinstance,/当前应用实例句柄.null);/指向传递给窗口的参数的指针.不用.if(!hwnd)/创建失败.return false;hwndmain=hwnd;/给全局窗口句柄付值.showwindow(hwnd,ncmdshow);/显示窗口.updatewindow(hwnd);/刷新用户区.return true;bool initwindowsclass(hinstance hinstance)wndclass wndclass;wndclass.cbclsextra=0;/无窗口类扩展.wndclass.cbwndextra=0;/无窗口实例扩展.wndclass.hbrbackground=(hbrush)(getstockobject(white_brush);/背景为白色.wndclass.hcursor=loadcursor(null,idc_arrow);/光标为为箭头.wndclass.hicon=loadicon(null,idi_application);/采用缺省图标.wndclass.hinstance=hinstance;/当前实例.wndclass.lpfnwndproc=wndproc;/消息处理函数.wndclass.lpszclassname=6_4;/窗口类名称.wndclass.lpszmenuname=null;/无菜单.wndclass.style=0;/缺省窗口风

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论