文本编程简介:
CString类是字符串操作的主要类,MFC中将对字符串的操作都封装在Cstring类中,以下是常用的成员函数:
1. void Empty( ):不带任何参数,该成员函数的作用是将某个字符串的内容清空。
2. CString Left( int nCount ):该成员函数的作用是取指定字符串的左面几个字符。参数nCount表示取字符的个数,执行该成员函数成功后,返回一个常量字符串。
3. CString Right( intnCount ):该成员函数的作用是取指定字符串的右面几个字符。参数nCount表示取字符的个数,执行该成员函数成功后,返回一个常量字符串.
4. void Format( LPCTSTR lpszFormat, ... )和void Format(UINTnFormatID, ... ):这两个成员函数的作用是得到一个格式化字符串。
5. int GetLength( ):该成员函数的作用是取得字符串的长度。函数调用成功返回一个整型值
GDI 自定义字体的类是CFont
1)创建字体对象,在使用之前必须用函数
CreateFont
、
CreateFontIndirect
、
CreatePointFont
或
CreatePointFontIndirect
初始化,其用法如下所示。
2)CFont
::
CreateFont
:创建具有指定属性的字体。
3)CFont
::
CreateFontIndirect
:创建拥有
LOGFONT
结构所指定的属性的字体。
4)CFont
::
CreatePointFont
:提供一种创建指定字体名和尺寸的字体的简单方法,自动将高度转换为
pDC
所指的设备描述表中所用的逻辑单位
例子:代码定义字体
CFont fn;
fn.CreatePointFont(120, "楷体");
dc.SelectObject( &fn );
CreatePointFont
是产生字体最简单的方法,它的第一个参数是高度,第二个参数是字体的名字,具体系统中装了哪些字体,可以打开记事本,单击其中的
【
格式
】|【
字体
】
命令就可以查到了
文本的编辑和显示都是在View类中实现的:
1.先加入OnCreate函数
创建设备环境即设置在主窗体中显示的文本的字体、大小等相关信息,以便输入文本时显示
2. 再加入WM_CHAR的消息的处理函数OnChar,
在
OnChar
函数中,要根据用户在键盘中输入的字符的不同分别进行处理。如果是退格键,那么删除一个字符。如果是回车键,那么另起一行,到下一行继续输入字符。如果是其他的字符,那么将依次显示在窗口上。
控制符的处理
1)处理回车键,
字符串最初是在(
0
,
0
)的位置输出的,当回车换行时
x
坐标值不变,
y
坐标值增长,每次增长的高度至少是设备描述表中字体的高度,
代码中的
0x0d
代表回车符,也可以用‘
\15’
表示,
0x08
代表退格符。代码如下:
if(0x0d==
nChar
) //
输入为回车键
{
m_ptOrigin.x
=0; //
输出初始位置的
x
坐标清零
m_ptOrigin.y
+=
tm.tmHeight
; //
输出初始位置的
y
坐标加上该行的高度
m_strInput.Empty
(); //
输出清空
}
2)退格键,
退格键的处理较为复杂,其实现的是每按一次键应删除屏幕上的一个字。但是这样实现起来很难,所以此处换种方法,将字符串以屏幕背景色输出,将原来屏幕上的一行字覆盖。由于覆盖在上面的字符串颜色和屏幕的颜色相同,因此看起来整行字不见了。然后将字符串的最后一个字符删除,将原来设备描述表中的颜色取回来,再输出字符串,这样给人的感觉就好像是删掉一个字符。
else if(0x08==nChar)
{
COLORREFoldClr; //将文字颜色设置为背景色,并将原来颜色保留到oldClr中
oldClr=dc.SetTextColor(dc.GetBkColor()); //用背景色将字符串再输出一遍,相当于将字符串擦去
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strInput); //将文字颜色设置为正常颜色
dc.SetTextColor(oldClr); //将字符串最后的一个字符去掉
m_strInput=m_strInput.Left(m_strInput.GetLength()-1);
}
3)其他字符的处理,不断调整光标闪烁的位置。由于每输入一个字符,光标都要往后移动,所以应该再定义一个局部变量CPoint pt,用来记录光标显示的位置
else //
不是如上的几种情况则
{
m_strInput
+=
nChar
; //
接收其他字符的输入
}
CSize
sz
=
dc.GetTextExtent
(
m_strInput
); //
创建对象并初始化
CPoint
pt(
sz.cx,m_ptOrigin.y
); //
创建对象并设置输出位置
SetCaretPos
(pt); //
设置输出位置
dc.TextOut
(
m_ptOrigin.x,m_ptOrigin.y,m_strInput
); //
在对应位置输出
dc.SelectObject(pOldFn);