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()。
// C
public:
CPoint ptCharacter;//字符位置
// C
CCh5Demo3View::CCh5Demo3View()
{
// TODO: add construction code here
//初始位置设置在(0,0)
;
;
}
void CCh5Demo3View::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if(nChar==13)//按下了回车键
{
//换行
;
;
SetCaretPos (ptCharacter);//将插入符移到键入点
ShowCaret ();//显示插入符
}
else
{
CClientDC dc(this);
HideCaret ();//隐藏插入符
dc.TextOu,(LPCTSTR)&nChar);//显示字符
CSize textsize;
textsize=dc.GetTextExtent((LPCTSTR)&nChar);//获取当前字符大小
//前进到下一个字符位置
;
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-