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

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


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: 移动插入符到窗口的某一位置




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值