Chinaunix首页 | 论坛 | 博客
  • 博客访问: 514992
  • 博文数量: 114
  • 博客积分: 5022
  • 博客等级: 大校
  • 技术积分: 1355
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-09 18:01
文章分类

全部博文(114)

文章存档

2012年(1)

2011年(3)

2010年(1)

2009年(16)

2008年(23)

2007年(39)

2006年(31)

我的朋友

分类:

2006-12-22 13:08:20

checkback:http://www.cppblog.com/jxliu02/articles/4473.html

vc中如何响应键盘和鼠标事件

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; // 按下鼠标左键后控件的水平和垂直方向的值分别与鼠标的光标位置一致

}     

阅读(5979) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~