第五讲鼠标键盘和资源.ppt

上传人:本田雅阁 文档编号:3123392 上传时间:2019-07-13 格式:PPT 页数:54 大小:2.19MB
返回 下载 相关 举报
第五讲鼠标键盘和资源.ppt_第1页
第1页 / 共54页
第五讲鼠标键盘和资源.ppt_第2页
第2页 / 共54页
第五讲鼠标键盘和资源.ppt_第3页
第3页 / 共54页
第五讲鼠标键盘和资源.ppt_第4页
第4页 / 共54页
第五讲鼠标键盘和资源.ppt_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《第五讲鼠标键盘和资源.ppt》由会员分享,可在线阅读,更多相关《第五讲鼠标键盘和资源.ppt(54页珍藏版)》请在三一文库上搜索。

1、,第五讲 鼠标、键盘和资源,2019年7月13日星期六,主要内容,鼠标在Windows程序设计中的应用 键盘在Windows程序设计中的应用,6.1鼠标在应用程序中的应用,鼠标作为定位输入设备,通过鼠标单击、双击和拖动功能,用户可以很容易地操作基于Windows图形界面的应用程序。 Windows中通过光标来指示当前鼠标的位置,在Windows操作系统中预定义了几种光标,并在Windows.h头文件中加以定义。,系统预定义的光标,自定义光标,例如,下面的语句为窗口类wndclass WNDCLASS wndclass; wndclass.hCursor=LoadCursor (hThislns

2、t, IDC_WAIT); 此外,还可在应用程序中调用LoadCursor函数改变光标形式,用户自定义光标 自定义光标保存在扩展名为.cur的文件中 光标名 CURSOR 光标文件(。cur),采用自定义光标 时,需在资源文 件中定义光标资源,加载光标资源(常在定义窗口类时进行) LoadCursor(hThisInst,lpszCursorname),当前实例句柄,当前光标,鼠标的操作,单击 双击 拖动,获取系统中鼠标的信息,获取鼠标按键数 int GetSystemMetrics(SM_CMOUSEBUTTONS ); 获取鼠标双击时两次单击之间的最大时间间隔 int GetDoubleC

3、lickTime(); /单位毫秒 设置鼠标双击时两次单击之间的最大时间间隔 BOOL SetDoubleClickTime(int); /单位毫秒,对光标的其它操作,将光标限制在一个区域(屏幕坐标) BOOL ClipCursor( CONST RECT *lpRect); 解除光标在某区域的限制 BOOL ClipCursor(NULL); 取得光标的当前位置(屏幕坐标) BOOL GetCursorPos( LPPOINT lpPoint); 设置当前光标的位置 BOOL SetCursorPos( int X, int Y);,对光标的其它操作,设置光标 SetCursor(HCURS

4、OR),例子,MouseInfoDebugMouseInfo.exe,鼠标消息,客户区(用户区)鼠标消息 非客户区鼠标消息,客户区鼠标消息,WM_xBUTTONDOWN通常跟随WM_xBUTTONUP,但并不一定跟随 如果要将xDOWN和xUP配对,可使用鼠标捕获,SetCapture(hWnd); 和 ReleaseCapture(); 此时键盘功能暂时失效,双击鼠标,对于客户区鼠标消息。当同一个鼠标键在较短时间内被连续单击两次,第二次按键被WM_xBUTTONDBLCLK取代。,但是,上述情况只有在将窗口类的style属性设置为CS_DBLCLKS才有效,鼠标消息的参数,lParam wP

5、aram,lParam,包含了鼠标位置信息(窗口坐标) 高16位:y坐标 低16位:x坐标 x=lParam,各种虚拟键的状态 判断在操作鼠标时是否按下键盘上的键 (wParam&MK_CONTROL) 值为1,按下ctrl 值为0,未按下ctrl,wParam,非客户区消息,WM_XBUTTONY,WM_NCXBUTTONY,例子,测试不同的光标Debug6_1.exe,6.2键盘在应用程序中的应用,键盘上的键,一个惟一的 标识值(扫描码),按下或释放某键时,产生,对应,扫描码是依赖于具体设备的,为达到设备无关性的要求,往往使用与具体设备无关的虚拟码,虚拟码是由Windows系统定义的与设备

6、无关的键的标识。,键盘的输入,产生一条消息,扫描码、虚拟码以及其他与击键有关的消息,设备驱动程序 截取键的扫描码,翻译,虚拟码,虚拟码,虚拟码是一种与设备无关的键盘编码,它的值存放在键盘消息的wParam参数中,用以标识哪一个键被按下或释放,最常用的虚拟码已经在Windows.h中定义。,常见虚拟码,键盘处理,取出键盘消息进行处理,消息,设备驱动程序,把消息放到系统的消息队列中,Windows从系统消息队列中取出消息,发送到相应的线程消息队列中,窗口函数,键盘消息,键盘消息,按键消息,字符消息,按下或松开一个键时 就产生了一按键消息,一个按键的组合产生了 一个可以显示的字符时, 就产生了一个字

7、符消息,系统按键消息,非系统按键消息,Alt键与相关输入键的组合 产生的消息,这些键一般 由Windows系统内部直接 处理,应用程序不处理,不使用Alt键组合 的按键消息,若应用程序处理了这些系统键消息,还要调用DefWindowsProc()函数,以便不影响系统对 它们的处理,按键消息,32位的变量,包含了识别按下 的键的虚键码,字符消息,在WinMain函数的消息循环中包含了TranslateMessage函数,其功能是把按键消息转化为字符消息,但只有当键盘驱动程序把键盘字符映射成ASCII码后才能产生WM_CHAR消息。,输入焦点,在鼠标使用中,Windows通过标识光标下的窗口来确定

8、发给消息的窗口 键盘消息却是发送给有“输入焦点”的窗口 任何时候,只有一个窗口具有输入焦点 主窗口、子窗口、控件都可能拥有输入焦点,例子,移动文本(虚拟键) 移动文本Debug移动文本.exe,资源,位图 图标 菜单 加速键,位图,BMP位图 格式,在资源文件(*.rc)中定义位图,MY_PIC BITMAP snap294.bmp,位图名称,位图关键字,位图文件名,内存设备环境,HDC hdcmem=CreateCompatibleDC(hdc); DeleteDC(hdcmem),位图的使用过程,1、定义 HBITMAP hBm; 2、加载位图 hBm=LoadBitmap(hInstan

9、ce,lpszName); 在WM_CCREATE消息中获取内存设备环境 Hdcmem=CreateCompatibleDC(hdc); 3、选入内存设备环境 SelectObject(hdcmem,hbm);,4、输出 BitBlt,输出,获取位图基本数据 GetObject BITMAP bm; GetObject(hBm,sizeof(BITMAP),(LPVOID),BITMAP结构 typedef struct tagBITMAP / bm LONG bmType; LONG bmWidth; LONG bmHeight; LONG bmWidthBytes; WORD bmPlan

10、es; WORD bmBitsPixel; LPVOID bmBits; BITMAP;,显示特效,水平交错效果 雨滴效果 百叶窗效果 随机积木效果,水平交错效果,原理 将内存设备情境对象中的位图数据拆分成奇、偶扫描线两部分,其中奇数条扫描线由上往下移动,偶数条扫描线则由下往上移动,且两者同时进行。屏幕上的效果为分别由上下两端出现的较淡栅栏图形,逐渐相互靠近,直至整个位图完全清楚。垂直交错效果的实现原理与之类似。,代码,雨滴效果,原理 将内存设备情境对象中位图数据的最后一条扫描线,顺序地从目标设备中待显示位图的第一条扫描线所在位置移动至最后一条处,并保留此条扫描线在屏幕上移动时留下的轨迹。接着

11、再把MemDC中位图数据的倒数第二条扫描线,顺序地从目标设备中待显示位图的第一条扫描线所在位置移动至倒数第二条处。其余的扫描线依此类推。,代码,百叶窗效果,原理 将内存设备情境对象中的位图数据分成若干组,然后分别从第一组到最后一组进行搬移,第一次搬移每组中第一条扫描线到目标设备中待显示位图的相应位置,第二次搬移每组中第二条扫描线,接着第三条、第四条扫描线。,代码,随机积木效果,原理 将内存设备情境对象中的位图数据分成纵横十等份共一百组数据,然后随机地取出这一百组数据中的某一组显示到目标设备中待显示位图的相应位置,如此反复直到所有一百组数据均显示完毕为止。,代码,看例子,图像编程参考书,周长发先生精通Visual C+图像编程,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1