您的位置:首页 > 其它

MFC实现文本的基本操作

2013-08-08 15:59 309 查看
1、在消息WM_CREAT响应函数OnCreat中窗口创建文本插入符。

int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

CClientDC dc(this);
TEXTMETRIC tm;	//定义一个文本信息结构体,用于接收文本的字体信息
dc.GetTextMetrics(&tm);	//获取当前文本的字体信息,主要需要字体的高度和宽度
CreateSolidCaret(tm.tmAveCharWidth, tm.tmHeight); //创建一个 文件插入符
ShowCaret();	//显示光标
return 0;
}


2、设置光标的位置为当前鼠标的点击位置

CString strLine; //存放文本缓冲区
POINT OldPoint;	//存放鼠标的当前位置

void CMyView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default

SetCaretPos(point);	//设置光标的位置为鼠标当前点击位置
OldPoint = point;	//存放当前鼠标位置
strLine.Empty();	//清空文本缓冲区,就行下一次输入

CView::OnLButtonDown(nFlags, point);
}


3、通过捕获WM_CHAR消息,获取键盘输入消息。

void CMyView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default

CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);	//获取文本信息

if (0x0d == nChar) //换行处理
{
strLine.Empty(); //情况缓冲区等待下一次输入
OldPoint.y += tm.tmHeight;	//文本插入符 Y坐标加一个文本高度
}
else if (0x08 == nChar)	//回车键处理
{
COLORREF clr = dc.SetTextColor(dc.GetBkColor()); //设置文本颜色为白色背景
dc.TextOut(OldPoint.x, OldPoint.y, strLine);	//输出文本
strLine = strLine.Left(strLine.GetLength()-2);	//去掉输出字符串的最后一位+空格
dc.TextOut(OldPoint.x, OldPoint.y, strLine);
dc.SetTextColor(clr);	//恢复文本颜色
}
else
{
strLine += nChar;	//把输入的字符 缓存在缓冲区中
}

/* 设置文本插入符的位置为当前输入位置 */
CSize sz = dc.GetTextExtent(strLine);	//获取字符串文本信息
POINT pt;
pt.x = OldPoint.x + sz.cx;
pt.y = OldPoint.y;
SetCaretPos(pt);	//设置文本插入符为当前文本输出的最后

dc.TextOut(OldPoint.x, OldPoint.y, strLine);	//输出文本

CView::OnChar(nChar, nRepCnt, nFlags);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: