MFC实现文本的基本操作

来源:互联网 发布:ff是什么软件 编辑:程序博客网 时间:2024/05/07 07:01

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 defaultSetCaretPos(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 defaultCClientDC 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);}



原创粉丝点击