Windows採用的是事件驅動機制, 滑鼠和鍵盤是使用者與Windows應用程式交互的最主要設備, Windows預先定義了大量的滑鼠消息和鍵盤消息, 而MFC也對其中的常用消息進行了封裝。
1 鍵盤消息及其處理鍵盤消息有鍵被按下(WM_KEYDOWN)、鍵被鬆開(彈起,WM_KEYUP)和輸入字元(WM_CHAR)3種。
在windows中, 鍵盤輸入以消息的形式傳遞給程式的視窗消息處理常式。 按下或釋放一個按鍵均會產生一條消息, 系統會將其放到與鍵盤輸入視窗相對應的執行緒消息隊伍列中。
2 字元消息處理當按下一個可顯示的字元(數位、字母、標點等)的鍵時, 將先後產生鍵被按下(WM_KEYDOWN)、鍵被鬆開(彈起,
MFC將WM_CHAR消息映射為ON_WM_CHAR, 其對應的處理函數為OnChar()。
// Ch5Demo3View.h
public:
CPoint ptCharacter;//字元位置
// Ch5Demo3View.cpp
CCh5Demo3View::CCh5Demo3View()
{
// TODO: add construction code here
//初始位置設置在(0, 0)
ptCharacter.x=0;
ptCharacter.y=0;
}
void CCh5Demo3View::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if(nChar==13)//按下了回車鍵
{
//換行
ptCharacter.x=0;
ptCharacter.y=ptCharacter.y+25;
SetCaretPos (ptCharacter);//將插入符移到鍵入點
ShowCaret ();//顯示插入符
}
else
{
CClientDC dc(this);
HideCaret ();//隱藏插入符
dc.TextOut(ptCharacter.x,ptCharacter.y,(LPCTSTR)&nChar);//顯示字元
CSize textsize;
textsize=dc.GetTextExtent((LPCTSTR)&nChar);//獲取當前字元大小
//前進到下一個字元位置
ptCharacter.x=ptCharacter.x+textsize.cx;
SetCaretPos (ptCharacter);//將插入符移到鍵入點
ShowCaret ();//顯示插入符
}
CView::OnChar(nChar, nRepCnt, nFlags);
}
3 創建鍵盤插入符鍵盤插入符(Caret)是一個閃爍的點陣圖(通常是一個細的垂直杠),
需要定位到字元將要輸入和顯示的位置。
鍵盤插入符可以使使用者知道在視窗何處可進行有效的鍵盤輸入。
void CCh5Demo3View::OnSetFocus(CWnd* pOldWnd)
{
CView::OnSetFocus(pOldWnd);
// TODO: Add your message handler code here
CreateSolidCaret(4, 20);//創建插入符
SetCaretPos (ptCharacter);//將插入符移到滑鼠點
ShowCaret ();//顯示插入符
}
-End-