VC
中用
KeyPress
表示键盘响应的所有事件,包括
OnKeyDown
事件(键按下)、
OnKeyUp
事件(键按下后弹起)和
OnKeyPress
事件(按了某个键)。
OnKeyuUp
事件的语法为
void Object1:: OnKeyUp( UINT nChar, UINT nRepCnt, UINT nFlags );
OnKeyDown
事件的语法为
void Object1:: OnKeyDown( UINT nChar, UINT nRepCnt, UINT nFlags );
这里参数
nChar
代表的是键盘上各键的代码,是编写程序时必须要写明的,而参数
nRepCnt,
和
nFlags
则可以使用默认值而不必编写。
下面说明
VC
的
KeyPress
事件中的
nChar
代码与键盘中各键的对应关系:
VK_0
到
VK_9
表示键盘上数字“
0
”到“
9
”键
(ASCII
码为
0x30 - 0x39)
;
VK_A
到
VK_Z
表示键盘上字母“
A
”到“
Z
”键
(ASCII
码为
0x41 - 0x5a)
;
VK_ADD
表示数字键盘上的“
+
”键。
VK_ALT
表示键盘上
“
ALT
”键。
VK_BACK_QUOTE
表示键盘上
“
`
”键。
VK_BACK_SLASH
表示键盘上
“
\
”键。
VK_BACK_SPACE
表示键盘上
“
BACKSPACE
“键。
VK_CAPS_LOCK
表示键盘上
“
CAPS LOCK
”键。
VK_CLOSE_BRACKET
表示键盘上
“
]
”键。
VK_COMMA
表示键盘上
“
,
”键。
VK_CONTROL
表示键盘上
“
CTRL
”键。
VK_DECIMAL
表示数字键盘上
“
.
”键。
VK_DELETE
表示键盘上
“
DELETE
”键。
VK_DIVIDE
表示键盘上
“
/
”键。
VK_DOWN
表示键盘上
“向下箭头”键。
VK_END
表示键盘上
“
END
”键。
VK_ENTER
表示键盘上
“
ENTER
”键。
VK_EQUALS
表示键盘上
“=”键。
VK_ESCAPE
表示键盘上
“
ESC
”键。
VK_F1
到
VK_F12
表示键盘上
“
F1
”到“
F12
”键。
VK_HOME
表示键盘上
“
HOME
”键。
VK_INSERT
表示键盘上
“
INSTERT
”键。
VK_LEFT
表示键盘上
“向左箭头”键。
VK_MULTIPLY
表示键盘上
“
*
”键。
VK_NUMPAD0
到
VK_NUMPAD9
表示数字键盘上
“
0
”到“
9
”键。
VK_OPEN_BRACKET
表示键盘上
“
[
”键。
VK_PAGE_DOWN
表示键盘上
“
PAGE DOWN
”键。
VK_PAGE_UP
表示键盘上
“
PAGE UP
”键。
VK_PAUSE
表示键盘上
“
PAUSE
”键。
VK_PRINTSCREEN
表示键盘上
“
PRINT SCREEN
”键。
VK_RIGHT
表示键盘上
“向右箭头”键。
VK_SCROLL_LOCK
表示键盘上
“
SCROLL LOCK
”键。
VK_SEMICOLON
表示键盘上
“;”键。
VK_SHIFT
表示键盘上
“
SHIFT
”键。
VK_SPACE
表示键盘上
“
SPACEBAR
”键。
VK_SUBTRACT
表示键盘上
“-”键。
VK_TAB
表示键盘上
“
TAB
”键。
VK_UP
表示键盘上
“向上箭头”键。
用键盘在人机交互中完成对屏幕中物体位置移动的控制功能时常会用到上、下、左、右几个方向键。下面的程序可以完成对某一可视控件
Object1
的位置进行控制(分别按下上、下、左、右键使其分别向上、下、左、右方向移动
5
个屏幕单位):
{
CWnd::OnKeyDown(UINT nChar, UINT nRecpCnt, UNIT nFlages);
Switch(nChar)
{
case VK_LEFT;
Object1.left=Object1.left-5;
//
按下左键控件左移
5
个单位
break;
case VK_RIGHT;
Object1.left=Object1.left+5;
//
按下右键控件右移
5
个单位
break;
case VK_UP;
Object1.top=Object1.top-5;
//
按下上键控件上移
5
个单位
break;
case VK_DOWN;
Object1.top=Object1.top+5;
//
按下下键控件下移
5
个单位
break;
defult:
break;
}
}
2.
对鼠标的响应
VC
中对鼠标的响应常用的有以下事件:
a. OnLButtonDblClk
:语法为
void Object1 Wnd
::
OnLButtonDblClk( UINT nFlags, CPoint point ){}
,表示控件对双击鼠标左键时的响应。
b. OnLButtonDown
:语法为
void Object1 Wnd
::
OnLButtonDown( UINT nFlags, CPoint point ){}
,表示控件对按下鼠标左键时的响应。
c. OnLButtonUp
:语法为
void Object1 Wnd
::
OnLButtonUp( UINT nFlags, CPoint point ){}
,表示控件对按下的鼠标左键放开后的响应。
d. OnRButtonDblClk
:语法为
void Object1 Wnd
::
OnRButtonDblClk( UINT nFlags, CPoint point ){}
,表示控件对双击鼠标右键时的响应。
e. OnRButtonDown
:语法为
void Object1 Wnd
::
OnRButtonDown( UINT nFlags, CPoint point ){}
,表示控件对按下鼠标右键时的响应。
f. OnRButtonUp
:语法为
void Object1 Wnd
::
OnRButtonUp( UINT nFlags, CPoint point ){}
,表示控件对按下的鼠标右键放开后的响应。
其中的参数
nFlags
用于指示按下的键的代码,它可以是下面的几个值或它们的组合:
MK_CONTROL
表示按下
CTRL
键
;
MK_LBUTTON
表示按下鼠标左键;
MK_MBUTTON
表示按下鼠标中键;
MK_RBUTTON
表示按下鼠标右键;
MK_SHIFT
表示按下
SHIFT
键;
Point
参数表示鼠标的光标位置相对于所在窗口的左上角的水平和垂直坐标值。
在
VC
中用鼠标响应事件来完成人机交互中的控制功能是比较容易的。例如把一个控件
Object1
的位置移动到鼠标光标的位置,下面简单的程序就可完成:
void Object1::OnLButtonDown(UINT nFlags, CPoint point)
{
CPoint Position
;
Position = point;
Object1->left=Position.x;
Object1->top=Position.y;
//
按下鼠标左键后控件的水平和垂直方向的值分别与鼠标的光标位置一致
}