您的位置:首頁>正文

VC|創建鍵盤插入符和字元消息處理

Windows採用的是事件驅動機制, 滑鼠和鍵盤是使用者與Windows應用程式交互的最主要設備, Windows預先定義了大量的滑鼠消息和鍵盤消息, 而MFC也對其中的常用消息進行了封裝。

1 鍵盤消息及其處理

鍵盤消息有鍵被按下(WM_KEYDOWN)、鍵被鬆開(彈起,WM_KEYUP)和輸入字元(WM_CHAR)3種。

在windows中, 鍵盤輸入以消息的形式傳遞給程式的視窗消息處理常式。 按下或釋放一個按鍵均會產生一條消息, 系統會將其放到與鍵盤輸入視窗相對應的執行緒消息隊伍列中。

2 字元消息處理

當按下一個可顯示的字元(數位、字母、標點等)的鍵時, 將先後產生鍵被按下(WM_KEYDOWN)、鍵被鬆開(彈起,

WM_KEYUP)和輸入字元(WM_CHAR)等3種消息。

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-

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示