首页计算机计算机软件VisualC++ 04 第4章 键盘和鼠标.pptx

04 第4章 键盘和鼠标.pptx

页数:41页文件大小:280.0 KB来源: VisualC++ppt课件

本课件对应课程第4章键盘和鼠标,先区分扫描码与虚拟码并列出常用虚拟键码,说明输入焦点、按键消息与字符消息的分类及字参数长字参数含义,随后给出键盘消息处理的程序示例,再系统讲解光标的加载、鼠标消息的参数取值、组合键监测、鼠标双击与鼠标捕获,最后介绍定时器消息WM_TIMER与SetTimer、KillTimer的用法并给出实例。

第4章键盘和鼠标教学重点页,聚焦键盘鼠标消息的字参数长字参数处理与定时器WM_TIMER编程
扫描码与虚拟码对比页,说明扫描码设备相关、虚拟码设备无关且存放于键盘消息wParam中
常用虚拟键码对照表(一),列出退格、制表、回车、Ctrl、Shift与Alt等键的VK常量
查看本课件的文字版(共 41 页,供检索与复制)

第1页:第4章教学重点

  • 教学重点1
  • 键盘消息的处理WM_KEYDOWN, WM_KEYUP
  • WM_CHAR,字参数
  • 长字参数意义2
  • 鼠标消息处理字参数
  • 长字参数意义以及处理方法3
  • 定时器消息API编程WM_TIMER

第2页:扫描码与虚拟码

4.1键盘消息编程---扫描码和虚拟码扫描码:键盘上的键的唯一标识值,设备相关。

虚拟码
Windows系统定义的键标识,设备无关。

它的值存放在键盘消息的wParam参数中,用以标识哪一个键被按下或释放。

第3页:常用虚拟码(一)

常用虚拟码(一)

常用虚拟键码对照表(一)
键名符号常量
退格键VK_BACK
鼠标左按钮VK_LBUTTON
制表键VK_TAB
鼠标右按钮VK_RBUTTON
回车键VK_RETURN
鼠标中按钮VK_MBUTTON
Ctrl键VK_CONTROL
Shift键VK_SHIFT
Pause键VK_PAUSE
Alt键VK_MENU

4.1键盘消息编程---常用的虚拟码说明符号常量名称说明符号常量名称退格键VK_BACK鼠标左按钮VK_LBUTTON制表键VK_TAB鼠标右按钮VK_RBUTTON回车键VK_RETURN鼠标中按钮VK_MBUTTONCtrl键VK_CONTROLShift键VK_SHIFTPause键VK_PAUSEAlt键VK_MENU

第4页:常用虚拟码(二)

常用虚拟码(二)

常用虚拟键码对照表(二)
键名符号常量
Esc键VK_ESCAPE
Caps Lock键VK_CAPITAL
PageDown键VK_NEXT
Page Up键VK_PRIOR
Home键VK_HOME
End键VK_END
右箭头键VK_RIGHT
左箭头键VK_LEFT
下箭头键VK_DOWN
上箭头键VK_UP
A~Z键VK_A~VK_Z
0~9键VK_0~VK_9

4.1键盘消息编程---常用的虚拟码说明符号常量名称说明符号常量名称Esc键VK_ESCAPECaps Lock键VK_CAPITALPageDown键VK_NEXTPage Up键VK_PRIORHome键VK_HOMEEnd键VK_END右箭头键VK_RIGHT左键头键VK_LEFT下箭头键VK_DOWN上箭头键VK_UPA~Z键VK_A~VK_Z0~9键VK_0~VK_9

第5页:键盘消息处理过程

4.1键盘消息编程---键盘消息处理过程

本页源文件仅提取到标题或少量文字,详细内容请对照本页图示。

第6页:输入焦点

4.1键盘消息编程---输入焦点能够接收键盘消息的窗口称为有“输入焦点”的窗口,这种窗口应是活动窗口及其子窗口。

输入焦点相关消息
WM_SETFOCUS:窗口正在接收输入焦点。
WM_KILLFOCUS
窗口失去输入焦点。

第7页:按键消息分类

4.1键盘消息编程---按键消息非系统按键消息:不使用Alt键组合的按键消息。

系统按键消息
Alt键与相关输入键的组合产生的消息,这些键一般由Windows系统内部直接处理,应用程序不处理。

第8页:按键消息对照表

按键消息对照表

按键消息类型对照表
含义类型消息
按下了非系统键消息非系统WM_KEYDOWN
松开了非系统键消息非系统WM_KEYUP
按下了系统键消息系统WM_SYSKEYDOWN
松开了系统键消息系统WM_SYSKEYUP

4.1键盘消息编程---按键消息含义类型消息按下了非系统键消息非系统WM_KEYDOWN松开了非系统键消息非系统WM_KEYUP按下了系统键消息系统WM_SYSKEYDOWN松开了系统键消息系统WM_SYSKEYUP

第9页:按键消息参数

4.1键盘消息编程---按键消息参数wParam:包含了识别按下的键的虚键码。

lParam(32bits)
重复计数位(0~15位)、OEM扫描码(16~23位)、扩展键标志(24位)、保留位(25~28位)、关联码(29位)、键的先前状态(位30)、转换状态(31位)。

第10页:字符消息的产生

4.1键盘消息编程---字符消息系统字符消息WM_SYSKEYDOWN、WM_SYSKEYUP产生非系统字符消息WM_KEYDOWN和WM_KEYUP产生

第11页:字符消息对照表

字符消息对照表

字符消息类型对照表
含义类型消息
非系统字符非系统WM_CHAR
非系统死字符非系统WM_DEADCHAR
系统字符系统WM_SYSCHAR
系统死字符系统WM_SYSDEADCHAR

4.1键盘消息编程---字符消息含义类型消息非系统字符非系统WM_CHAR非系统死字符非系统WM_DEADCHAR系统字符系统WM_SYSCHAR系统死字符系统WM_SYSDEADCHAR

第12页:字符消息处理(一)

4.2键盘操作程序举例---字符消息处理键盘消息的一般格式如下:case WM_CHAR:}

第13页:字符消息处理(二)

4.2键盘操作程序举例---字符消息

if(wParam == VK_ESCAPE)……}} 

第14页:按键消息处理(一)

4.2键盘操作程序举例---按键消息case WM_KEYDOWN://case WM_KEYUP:{

switch(wParam){ case VK_END:……break;

第15页:按键消息处理(二)

4.2键盘操作程序举例---按键消息case VK_HOME:break; case VK_DELETE:……break; }} 

第16页:4.3 鼠标消息编程

4.3鼠标消息编程鼠标:定位输入设备操作:单击、双击和拖动,etc1、光标的使用

  • 系统预定义光标Windows中通过光标来指示当前鼠标的位置,在Windows操作系统中预定义了几种光标,并在Windows.h头文件中加以定义。

第17页:预定义光标(一)

预定义光标(一)

系统预定义光标对照表(一)
光标属性描述符号常量
箭头光标IDC_ARROW
十字光标IDC_CROSS
I形文本光标IDC_IBEAM
空图标IDC_ICON
十字箭头光标IDC_SIZEALL

4.3鼠标消息编程---预定义光标光标属性描述符号常量箭头光标IDC_ARROW十字光标IDC_CROSSI形文本光标IDC_IBEAM空图标IDC_ICON十字箭头光标IDC_SIZEALL

第18页:预定义光标(二)

预定义光标(二)

系统预定义光标对照表(二)
光标属性描述符号常量
带有指向东北方和西南方箭头的光标IDC_SIZENESW
带有指向北方和南方箭头的光标IDC_SIZENS
带有指向西北方和东南方箭头的光标IDC_SIZENWSE
带有指向东方和西方箭头的光标IDC_SIZEWE
垂直箭头光标IDC_UPARROW
计时光标(也称沙漏光标)IDC_WAIT

4.3鼠标消息编程---预定义光标光标属性描述常量符号带有指向东北方和西南方箭头的光标IDC_SIZENESW带有指向北方和南方箭头的光标IDC_SIZENS带有指向西北方和东南方箭头的光标IDC_SIZENWSE带有指向东方和西方箭头的光标ISC_SIZEWE垂直箭头光标IDC_UPARROW计时光标(也称沙漏光标)IDC_WAIT

原文「带有指向东方和西方箭头的光标」对应常量写作ISC_SIZEWE,按Windows标准应为IDC_SIZEWE,已校正。

第19页:窗口类中加载光标

4.3鼠标消息编程---光标的加载定义窗口类时加载光标WNDCLASS ws;

ws.hCursor = LoadCursor(NULL,IDC_WAIT);

第20页:LoadCursor函数

4.3鼠标消息编程---光标的加载在应用程序中加载光标

HCURSOR LoadCursor(HINSTANCE hInstance, 

第21页:SetCursor函数

4.3鼠标消息编程---光标的加载在应用程序中加载光标

HCURSOR SetCursor(HCURSOR hCursor 

第22页:加载光标示例

4.3鼠标消息编程---光标的加载程序举例(加载光标):HCURSOR hCursor;

hCursor = LoadCursor(NULL,IDC_CROSS); SetCursor(hCursor);

第23页:鼠标消息(左键)

4.3鼠标消息编程---鼠标消息WM_LBUTTONDOWN:单击鼠标左键时产生WM_LBUTTONUP:放开鼠标左键时产生WM_LBUTTONDBLCLK:双击鼠标左键产生WM_MOUSEMOVE:移动鼠标时产生

第24页:鼠标消息(右键)

4.3鼠标消息编程---鼠标消息WM_RBUTTONDOWN:单击鼠标右键时产生WM_RBUTTONUP:放开鼠标右键时产生WM_RBUTTONDBLCLK:双击鼠标右键产生

第25页:鼠标消息wParam

鼠标消息wParam

鼠标消息字参数wParam取值对照表
含义值
按下了Ctrl键MK_CONTROL
按下了鼠标左键MK_LBUTTON
按下了鼠标中键MK_MBUTTON
按下了鼠标右键MK_RBUTTON
按下了键盘上的Shift键MK_SHIFT

4.3鼠标消息编程---鼠标消息参数wParam:包含了指示各种虚键状态的值。含义值按下键按上的Ctrl键MK_CONTROL按下了鼠标左键MK_LBUTTON按下了鼠标中键MK_MBUTTON按下了鼠标右键MK_RBUTTON按下键盘上的Shift键MK_SHIFT

第26页:鼠标消息lParam

4.3鼠标消息编程---鼠标消息参数lParam:包含了鼠标的位置信息(相当于窗口的左上角为原点的坐标值),低位包含鼠标位置的x坐标值,高位包含鼠标位置的y坐标值。

WORD LOWORD(DWORD dwValue); WORD HIWORD(DWORD dwValue); 程序举例:x = LOWORD(lParam); y = HIWORD(lParam);

第27页:Shift与Ctrl监测

4.3鼠标消息编程---鼠标消息处理对Shift和Ctrl键进行监测case WM_LBUTTONDOWN

if( ( wParam &MK_CONTROL )&&( wParam &MK_SHIFT ))……break;

第28页:鼠标双击

4.3鼠标消息编程---鼠标双击Windows系统默认的时间间隔为0.5秒,也可以调用SetDoubleClickTime()重新设定间隔值。

BOOL SetDoubleClickTime(UINT uInterval 

第29页:双击与CS_DBLCLKS

4.3鼠标消息编程---鼠标双击要使窗口函数能接收鼠标双击产生的消息,在注册窗口类时必须具有CS_DBLCLKS属性。 wndclass.style = CS_HEADRAW|CS_VERDRAW|CS_DBLCLKS; 若窗口不包含上述属性的定义,即使进行了双击操作,该窗口也只能接收到两条单击消息。

第30页:鼠标捕获

4.3鼠标消息编程---鼠标捕获捕获鼠标消息可调用SetCapture()函数,一旦从窗口捕获了鼠标,系统的键盘功能就暂时失效,其它窗口也无法得到鼠标消息。

HWND SetCapture( HWND hWnd ); 当该窗口不再需要捕获鼠标消息时,应及时调用ReleaseCapture()以释放鼠标。BOOL ReleaseCapture(VOID);

第31页:sprintf函数

4.3鼠标消息编程---常用函数sprintf

int sprintf(char* buffer,const char* format[,argument]…); 程序举例:char buffer[30]; int x,y; sprintf(buffer,”x=%d,y=%d”,x,y);

第32页:MessageBox函数

4.3鼠标消息编程---常用函数MessageBox

int MessageBox(HWND hWnd, 

第33页:MessageBox样式(一)

MessageBox样式(一)

MessageBox消息框样式取值(一)
说明标识符
三个按钮:Abort, Retry, Ignore.MB_ABORTRETRYIGNORE
一个按钮:OK.MB_OK
二个按钮:OK,Cancel.MB_OKCANCEL

4.3鼠标消息编程---常用函数MessageBoxUINT uType说明标识符三个按钮: Abort, Retry, Ignore.MB_ABORTRETRYIGNORE一个按钮: OK.MB_OK二个按钮: OK,Cancel.MB_OKCANCEL

第34页:MessageBox样式(二)

MessageBox样式(二)

MessageBox消息框样式取值(二)
说明标识符
二个按钮:Retry,Cancel.MB_RETRYCANCEL
二个按钮:Yes,No.MB_YESNO
三个按钮:Yes, No, Cancel.MB_YESNOCANCEL

4.3鼠标消息编程---常用函数MessageBoxUINT uType说明标识符二个按钮: Retry,Cancel.MB_RETRYCANCEL二个按钮: Yes,No.MB_YESNO三个按钮: Yes, No, Cancel.MB_YESNOCANCEL

第35页:鼠标绘图实例

4.4鼠标应用程序实例程序功能:用户按住Ctrl键同时拖动鼠标可以画一个矩形,用户按住Shift键同时拖动鼠标可以画一个椭圆,与此同时在左上角显示鼠标坐标。

第36页:WM_TIMER消息

4.5定时器消息编程WM_TIMER消息消息号
WM_TIMER字参数:wParam ==》定时器标识长字参数:(TIMERPROC *) lParam==》定时器回调函数地址

第37页:SetTimer函数

4.5定时器消息编程---SetTimer函数功能:启动定时器

UINT SetTimer(HWND hWnd, 

第38页:KillTimer函数

4.5定时器消息编程---KillTimer函数功能:销毁定时器

BOOL KillTimer(HWND hWnd, 

第39页:定时器回调函数

4.5定时器消息编程---回调函数VOID CALLBACK

TimerProc(HWND hwnd, 

第40页:定时器实例要求

4.5定时器消息编程---程序举例设计API应用程序,通过定时器消息实现正弦曲线的动态显示。

设计要求
1、绘制网格线以确定显示区域;
  • 窗口显示一个周期T的正弦曲线,曲线占满窗口时动态曲线左移显示新数据点;
  • 按下CTRL键,单击鼠标左键启动定时器;
  • 按下SHIFT键,单击鼠标左键停止定时器;

第41页:定时器实例效果

4.5定时器消息编程---程序举例

本页源文件仅提取到标题或少量文字,详细内容请对照本页图示。