MFC文本编程
来源:互联网 发布:淘宝网平板电脑大全 编辑:程序博客网 时间:2024/05/29 11:16
应该说计算机对字符和文字的处理是最多的,在实际应用中也随处可见,比如:将你的资料写入word文档、编写Excel表格、演讲前的PPT制作等等,这些都离不开计算机对文字的处理。在MFC框架中,微软为我们提供了很多关于字符和文字的处理函数,方便我们编写文字处理程序。
插入符
1.创建文本插入符
在文本处理程序中,如:notepad工具的编辑窗口都有一条闪烁的竖线,我们称之为“插入符”。MFC中的CWnd类提供了CreateSolidCaret函数方便我们创建一个“插入符”。
CreateSolidCaret(0, 100);ShowCaret();CreateSolidCaret函数需要传入两个参数,一个是插入符的宽度,一个是插入符的高度。前者根据经验值一般取字符平均长度的八分之一,后者为字符高度。另外,ShowCaret函数表示在当前位置显示插入符。
2.有关字体的度量信息
在文本编程中,对当前字体的度量信息的获取很重要,比如在创建一个文本插入符时,需要字符平均宽度值、字符高度,在应用其他的操作时,可能需要最大字符宽度、降序高度或升序高度等,那么这些值我们从何得到?事实上,MFC的CClientDC类为我们提供了GetTextMetrics函数方便我们获得有关字体的度量信息,该函数需要传入一个描述当前字体度量信息的数据结构:TEXTMETRIC,使用该函数过后有关字体的度量信息会自动填充这个数据结构。
3.创建图形插入符
图形插入符一般很少用到,但为了体现知识的整体性,我们在这里也顺便说一下吧。与创建文本插入符一样,创建图形插入符也是CreateCaret方法,只不过这次我们需要传入一个CBitmap类:
CBitmap bitmap;bitmap.LoadBitmapW(IDB_BITMAP1);CreateCaret(&bitmap);ShowCaret();bitmap.Detach();输出字符串
1.对CString中的字符串直接输出
CString str("VC++ 文本编程");pDC->TextOutW(0, 100, str);2.加载字符串资源输出
CString str;str.LoadStringW(IDS_STRINGTEXT);pDC->TextOutW(0, 30, str);3.在路径层中将字符串输出
关于路径层的概念,我还是直接引用百度百科中的内容吧,这里也很容易理解:路径层主要运用于画图当中,其概念就像当年军阀割据时圈地一样,在地域上划定了界线,界线之内是各自的地盘,别人不能侵犯。VC++中利用CDC提供的BeginPath和EndPath这两个函数来实现路径层。BeginPath()其作用是在设备描述表中打开一个路径层;然后利用图形设备接口提供的函数进行绘图操作,例如绘制一些点、椭圆等;最后,绘图操作完成之后,应用程序调用EndPath()这个函数关闭这个路径层。在绘图时,如果希望图的某一部分与其他部分分开处理,就可以利用路径层的独立性,调用SelectClipPath,SelectClipPath函数所需的参数只有一个,但供选择的值有很多,具体可以查看MSDN文档,其中RGN_DIFF模式可以将裁剪区域与路径层相分离。
CString str("VC++ 文本编程");pDC->TextOutW(50, 100, str);CSize sz = pDC->GetTextExtent(str);pDC->BeginPath();pDC->Rectangle(50, 100, 50 + sz.cx, 100 + sz.cy);pDC->EndPath();pDC->SelectClipPath(RGN_DIFF);for(int i = 0; i < 500; i+= 10){pDC->MoveTo(0, i);pDC->LineTo(500, i);pDC->MoveTo(i, 0);pDC->LineTo(i, 500);}
4.一个简单的文本处理程序
文本处理程序的编写是一个很复杂的系统工程,我们在这里只给出了最简单的一些功能。如:输入显示文字、处理回车键进行换行、处理退格键进行删除等。具体思路如下:
- 首先输入的文字要存储到一个字符串中,这里我们起名为m_strline。
- 其次,当我们单击鼠标左键时,我们捕获鼠标的位置,将插入符设置到捕获位置,并将位置存储为文字开始输出位置;
- 第三,当我们输入文字时,处理WM_CHAR消息,如果是回车符,则清空m_strline字符串,输出文字位置的y坐标也要在原基础上加上一个字符高度,并且插入符也要相应的跟着移动。如果是退格键,则获取背景颜色,删掉已经输出的一个字符。如果是普通字符,则将字符加入m_strline进行存储,并在适当位置进行显示。值得注意的是,如果输出的文字是中文字符,要对WM_CHAR的消息处理函数的nChar参数,使用wchar_t进行强转。
CClientDC dc(this);CFont font;font.CreatePointFont(200, _T("楷体"), NULL);CFont *pOldFont = dc.SelectObject(&font);TEXTMETRIC tm;dc.GetTextMetrics(&tm);if(0x0d == nChar){m_strLine.Empty();m_ptOrign.y += tm.tmHeight;}else if(0x08 == nChar){COLORREF clr = dc.SetTextColor(dc.GetBkColor());dc.TextOutW(m_ptOrign.x, m_ptOrign.y, m_strLine);m_strLine = m_strLine.Left(m_strLine.GetLength() - 1);dc.SetTextColor(clr);}else{m_strLine += (wchar_t)nChar;}CSize sz = dc.GetTextExtent(m_strLine);CPoint pt;pt.x = m_ptOrign.x + sz.cx;pt.y = m_ptOrign.y;SetCaretPos(pt);dc.TextOutW(m_ptOrign.x, m_ptOrign.y, m_strLine);dc.SelectObject(pOldFont);
- MFC 文本编程 -- 总结
- MFC 文本编程
- MFC文本编程
- MFC文本编程
- MFC文本编程概述
- MFC学习日记五:Mfc文本编程
- MFC学习笔记之文本编程
- MFC学习笔记之文本编程
- 孙鑫-MFC笔记四--文本编程
- MFC——4.文本编程
- MFC(三)——文本编程
- VS2013/MFC基于对话框编程:文本超链接
- MFC学习笔记(三)——文本编程
- 【编程语言MFC--如何得到CEditView里面的文本
- MFC(文本编程,孙鑫C++第五讲笔记整理)
- VC++深入详解(3):MFC文本编程
- MFC文本编程——孙鑫第五课
- MFC文本编程(插入符的使用)
- GForms展现服务云开发平台
- jsoncpp在linux下的配置
- WebService入门一、Hello WebService
- POJ 3087 Shuffle'm Up
- 【起点】跟我一起创建自己的第一个Android应用——HelloAndroid
- MFC文本编程
- How to define a bash function for use in any script?
- svn服务器更换
- 汇编语言 JMP CALL RET RETF的使用与区别
- MIT:算法导论——7.1.基本数据结构_栈、队列、链表、有根树
- git checkout之一 HEAD基本和detached 状态
- Mysql数据库备份的问题:mysqldump: Got error: 1049: Unknown database 'blog;' when selecting the database
- 安装mysql
- 解決git merge conflict