《第五讲鼠标键盘和资源.ppt》由会员分享,可在线阅读,更多相关《第五讲鼠标键盘和资源.ppt(54页珍藏版)》请在三一文库上搜索。
1、第1页 第五讲第五讲 鼠标、键盘和资源鼠标、键盘和资源 * 第2页 主要内容 n鼠标在Windows程序设计中的应用 n键盘在Windows程序设计中的应用 第3页 6.1鼠标在应用程序中的应用 n鼠标作为定位输入设备,通过鼠标单击、 双击和拖动功能,用户可以很容易地操作 基于Windows图形界面的应用程序。 nWindows中通过光标来指示当前鼠标的位 置,在Windows操作系统中预定义了几种 光标,并在Windows.h头文件中加以定义 。 第4页 系统预定义的光标 代表预定义光标的常量光标属性描述 IDC_ARROW 箭头光标 IDC_CROSS 十字光标 IDC_IBEAMI 形文
2、本光标 IDC_ICON 空图标 IDC_SIZEALL 十字箭头光标 IDC_SIZENESW 带有指向东北方和西南方箭头的光标 IDC_SIZENS 带有指向北方和南方箭头的光标 IDC_SIZENWSE 带有指向西北方和东南方箭头的光标 ISC_SIZEWE 带有指向东方和西方箭头的光标 IDC_UPARROW 垂直箭头光标 IDC_WAIT 计时光标(也称沙漏光标) 第5页 自定义光标 例如,下面的语句为窗口类wndclass WNDCLASS wndclass; wndclass.hCursor=LoadCursor (hThislnst, IDC_WAIT); 此外,还可在应用程序
3、中调用LoadCursor函数改变光标形式 用户自定义光标 自定义光标保存在扩展名为.cur的文件中 光标名 CURSOR 光标文件(。cur) 采用自定义光标 时,需在资源文 件中定义光标资源 加载光标资源(常在定义窗口类时进行) LoadCursor(hThisInst,lpszCursorname) 当前实例句柄 当前光标 第6页 鼠标的操作 n单击 n双击 n拖动 第7页 获取系统中鼠标的信息 n获取鼠标按键数 int GetSystemMetrics(SM_CMOUSEBUTTONS ); n获取鼠标双击时两次单击之间的最大 时间间隔 int GetDoubleClickTime()
4、; /单位毫秒 n设置鼠标双击时两次单击之间的最大 时间间隔 BOOL SetDoubleClickTime(int); /单位毫秒 第8页 对光标的其它操作 n将光标限制在一个区域(屏幕坐标) BOOL ClipCursor( CONST RECT *lpRect); n解除光标在某区域的限制 BOOL ClipCursor(NULL); n取得光标的当前位置(屏幕坐标) BOOL GetCursorPos( LPPOINT lpPoint); n设置当前光标的位置 BOOL SetCursorPos( int X, int Y); 第9页 对光标的其它操作 n设置光标 nSetCursor
5、(HCURSOR) 第10页 例子 nMouseInfoDebugMouseInfo.exe 第11页 鼠标消息 n客户区(用户区)鼠标消息 n非客户区鼠标消息 第12页 客户区鼠标消息 第13页 n WM_xBUTTONDOWN通常跟随 WM_xBUTTONUP,但并不一定跟随 n 如果要将xDOWN和xUP配对,可使用鼠标捕 获 n SetCapture(hWnd); 和 ReleaseCapture(); n 此时键盘功能暂时失效 第14页 双击鼠标 n 对于客户区鼠标消息。当同一个鼠标键在较短 时间内被连续单击两次,第二次按键被 WM_xBUTTONDBLCLK取代。 但是,上述情况只
6、有在将窗口类的style属性设置 为CS_DBLCLKS才有效 CS_DBLCLKS样式的窗口, 双击鼠标左键产生如下消息: WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONDBLCLK WM_LBUTTONUP 非CS_DBLCLKS样式的窗口,双 击鼠标左键产生如下消息: WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONDOWN WM_LBUTTONUP 第15页 鼠标消息的参数 nlParam nwParam 第16页 lParam n包含了鼠标位置信息(窗口坐标) n高16位:y坐标 n低16位:x坐标 nx=lParam x=L
7、OWORD(lParam); ny=(lParam y= HIWORD(lParam); 第17页 n 各种虚拟键的状态 n 判断在操作鼠标时是否按下键盘上的键 (wParam n2、加载位图 nhBm=LoadBitmap(hInstance,lpszName); n在WM_CCREATE消息中获取内存设备环境 nHdcmem=CreateCompatibleDC(hdc); n3、选入内存设备环境 nSelectObject(hdcmem,hbm); 第40页 n4、输出 nBitBlt 第41页 n输出 第42页 n获取位图基本数据 nGetObject nBITMAP bm; nGet
8、Object(hBm,sizeof(BITMAP),(LPVOID) 第43页 nBITMAP结构 ntypedef struct tagBITMAP / bm LONG bmType; LONG bmWidth; LONG bmHeight; LONG bmWidthBytes; WORD bmPlanes; WORD bmBitsPixel; LPVOID bmBits; BITMAP; 第44页 显示特效 n水平交错效果 n雨滴效果 n百叶窗效果 n随机积木效果 第45页 水平交错效果 n原理 n将内存设备情境对象中的位图数据拆分成奇、偶扫 描线两部分,其中奇数条扫描线由上往下移动,偶
9、数条扫描线则由下往上移动,且两者同时进行。屏 幕上的效果为分别由上下两端出现的较淡栅栏图形 ,逐渐相互靠近,直至整个位图完全清楚。垂直交 错效果的实现原理与之类似。 第46页 代码 第47页 雨滴效果 n原理 n将内存设备情境对象中位图数据的最后一条扫描线 ,顺序地从目标设备中待显示位图的第一条扫描线 所在位置移动至最后一条处,并保留此条扫描线在 屏幕上移动时留下的轨迹。接着再把MemDC中位图 数据的倒数第二条扫描线,顺序地从目标设备中待 显示位图的第一条扫描线所在位置移动至倒数第二 条处。其余的扫描线依此类推。 第48页 代码 第49页 百叶窗效果 n原理 n将内存设备情境对象中的位图数据分成若 干组,然后分别从第一组到最后一组进行 搬移,第一次搬移每组中第一条扫描线到 目标设备中待显示位图的相应位置,第二 次搬移每组中第二条扫描线,接着第三条 、第四条扫描线。 第50页 代码 第51页 随机积木效果 n原理 n将内存设备情境对象中的位图数据分成纵横十等份 共一百组数据,然后随机地取出这一百组数据中的 某一组显示到目标设备中待显示位图的相应位置, 如此反复直到所有一百组数据均显示完毕为止。 第52页 代码 第53页 看例子 第54页 图像编程参考书 n周长发先生精通Visual C+图像编程
链接地址:https://www.31doc.com/p-2625758.html