一。響應鍵盤事件:
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;
}
}
二. 對鼠標的響應
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; // 按下鼠標左鍵後控件的水平和垂直方向的值分別與鼠標的光標位置一致
}