MFC 文本编程

文本编程简介:

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值