MFC实现文本的基本操作

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);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值