键盘与鼠标是windows应用程序的输入设备
键盘消息
按键后,电路产生编码,每个有意义的键都对应一个唯一的扫描码,按键或释放键会产生。但不同产家生产的设备产生的编码不同,所以用虚拟码(e.gVK_ENTER)统一表示,表示成设备无关的键。
按键消息过程:
- 设备驱动程序获取键的扫描码,将扫描码翻译为虚拟码。产生了一条含扫描码、虚拟码和其它按键相关信息的消息。
- 设备驱动程序将消息放到系统的消息队列。
- windows从系统队列里取出消息,再把它发到相应的线程消息队列中,即应用程序队列。
- (经过主函数WinMain()消息循环),由窗口过程(wndProc())从取出线程队列中取出消息,进行进一步处理。(应用程序对应的某一个窗口)。
WinMain()函数消息循环中的TranslateMessage():将按键消息(WM_KEYDOWN等)转化为字符消息WM_CHAR与WM_DEADCHAR(不能显示字符)。
键盘消息
包含两类按键消息与字符消息。按下一个键就会产生这两种消息。
按键消息
两类:系统键消息(alt+*,由系统内存部直接处理,应用程序不用处理)与非系统键消息。
按键消息两个变量:wParam与lParam
字符消息
WM_CHAR与WM_DEADCHAR(不可显示)
插字符caret
指示当前正文位置。
//创建插字符
BOOL CreatCaret(hWnd,hBitmap(一般NULL),hWidth,hHeight)
//显示插字符
BOOL ShoeCaret(hWnd)
//设置插字符位置
BOOL SetCaretPos(int x,int y)
//获取插字符位置
BOOL GetCaretPos(LPPOINT lpPoint)
鼠标消息
windows中通过光标来指示当前鼠标位置
鼠标光标
系统有预设的,在系统盘cursors文件夹下保存,用常量IDC_…表示,如IDC_NO。用户可以自定义光标图标:在资源文件中保存图片为.cur文件。
光标cursor
指示鼠标当前位置
加载光标
应用程序加载光标一般在定义窗口时(初始化时)。程序运行过程中也可以。
WNDCLASSEX wndclass;
…………
wndclass.hCursor=LoadCursor(hThisInst,IDC_WAIT)
鼠标Iparam低位0~15
鼠标消息检测
监测shift与ctrl 时用:
case WM_LBUTTONDOWN: if((wParam&&MK_CONTROL)&&(wParam&&MK_SHIFT)) ... break;
不监测shift与ctrl 时用:
//单击鼠标左键 case WM_LBUTTONDOWN: //释放鼠标左键 case WM_LBUTTONUP: //处理鼠标移动消息 case WM_MOUSEMOVE:
鼠标应用程序实例