您的位置:首页 > 编程语言 > C语言/C++

MFC单文档中实现键盘字符的插入以及键盘插入符的使用

2014-10-29 08:47 239 查看
当我们使用键盘进行的字符数输入的时候,肯定在文档视图类中依次显示键入的字符,并且光标插入符会随之移动。

1.我们需要在视图类的头文件中,定义一个变量用来保存视图窗口中输出位置。

CPoint ptCharator;

2.在构造函数中对其进行初始化。

Ctest1View::Ctest1View()

{
// TODO:  在此处添加构造代码
ptCharator.x = 0;
ptCharator.y = 0;

}

3.WM_CHAR添加消息响应函数

void Ctest1View::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)

{
// TODO:  在此添加消息处理程序代码和/或调用默认值
if (nChar == 13){
ptCharator.x = 0;
ptCharator.y += 25;
SetCaretPos(ptCharator);
ShowCaret();
}
else{
CClientDC dc(this);
HideCaret();
dc.TextOutW(ptCharator.x, ptCharator.y, (LPCTSTR)&nChar);
CSize textsize;
textsize = dc.GetTextExtent((LPCTSTR)&nChar);
ptCharator.x += textsize.cx;
SetCaretPos(ptCharator);
ShowCaret();

}
CView::OnChar(nChar, nRepCnt, nFlags);

}

4.在视图类中添加WM_SETFOCUS消息映射和消息响应函数,在其中创建键盘插入符,病在当前的输入位置显示。

void Ctest1View::OnSetFocus(CWnd* pOldWnd)

{
CView::OnSetFocus(pOldWnd);

CreateSolidCaret(3, 18);
SetCaretPos(ptCharator);
ShowCaret();

// TODO:  在此处添加消息处理程序代码

}

以上代码就完成就字符插入以及插入符的使用

一般情况下一个应用程序有多个窗口,而键盘消息只能被一个窗口接受,接受键盘消息的窗口称为劝“输入焦点”的窗口, 具有数据焦点的窗口成为活动窗口,当某一个窗口成为活动窗口的时候,windows会加亮显示其标题栏或窗口边框。

windows用WM_FOCUS和WM_KILLFOCUS消息通知即将接受或失去焦点的窗口,当窗口获得焦点的时候,就可以创建插入符了,若窗口没有焦点,就不让进行键盘的输入。另外,插入符一旦创建起来,还需要在窗口中对其进行定位和显示。

CWnd类提供了8个创建和管理键盘插入符的成员函数,各函数及实现的功能如下:

CreateCaret:使用用户提供的位图创建插入符

CreateGrayCaret: 创建用户自定义大小的实心灰色插入符

CreateSolidCaret:创建用户自定义大小的实心黑色插入符

DestoryCaret: 销毁插入符

ShowCaret: 显示插入符

HideCaret: 隐藏插入符

GetCaretPos : 返回插入符的位置

SetCaretPos: 移动插入符到窗口的某一位置
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ MFC
相关文章推荐