MFC文本编程概述

本节是对文本编程的基本知识介绍
我们通过以下代码熟悉文本编程的基本函数有哪些,并且这些函数各有什么作用。

 我们通过CClientDC创建一个设备描述上下文对象dc,然后定义一个TEXTMETRIC对象,TEXTMETRIC结构体对象用来表示目前设备描述表中字体的相关信息,其中最为重要的信息就是tmAveCharWidth平均字符的宽度(因为字符之间的宽度不一样,比如‘w’和‘i’,明显前者比后者宽),tmHeight字符的高度,这个数据是相对于整体字符来说的,它包括tmAscent和tmDescent的和。我们调用GetTextMetrics函数得到字体相关信息。
 我们要通过CreateSolidCaret函数创建插入符,此函数是CWnd类的函数,所以调用的时候不用指明窗口句柄,在哪个窗口类调用,就是在哪个窗口类出现。创建之后要通过调用showcaret函数才能在指定窗口显示。
 我们还可以通过bitmap创建位图插入符,首先通过LoadBitmap函数载入位图,接着调用CreateCaret函数将位图载入插入符对象。
 利用SetTimer函数可以设定定时器,定时器的第三个指针如果不为null,直接在指定时间调用指向的函数,如果为NULL,则在指定时间窗口将接受一个WM_TIMER消息。
    CClientDC dc(this);
    TEXTMETRIC tm;
    dc.GetTextMetrics(&tm);
    CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
    ShowCaret();
    bitmap.LoadBitmap(IDB_BITMAP1);
    CreateCaret(&bitmap);
    ShowCaret();
    SetTimer(1,100,NULL);

在vc程序中,我们可以预先设置指定字符串,指定方式是在工程的Resource选项卡中,有一个string table,在这里面可以预设指定字符串,并且每个字符串都有指定ID,我们可以通过指定ID调用LoadString初始化指定cstring字符串对象。通过GetTextExtent调用会返回一个CSize类的对象,该对象的cx、cy分别代表我们在GetTextExtent函数参数列表中指定cstring字符串的宽和高。
这里我们要介绍一种名词,叫路径层,我们要先知道路径层起到的作用是什么,它起到的作用就是灵活选定整个作用域中指定区域,该区域一旦选定,则以下的所用操作都在该区域进行。总之,路径层就是指定需要操纵的区域。
怎么设定路径层呢,我们通过BeginPath()、Rectangle(50,50,50+sz.cx,50+sz.cy);和EndPath()这三个个函数的组合完成。其中Rectangle(50,50,50+sz.cx,50+sz.cy)指定的区域就是路径层区域。然后我们再根据SelectClipPath()函数,通过设定其的参数实现区域的选定。

CString s;
s.LoadString(61446);
pDC->TextOut(50,50,s);
CSize sz=pDC->GetTextExtent(s);
pDC->BeginPath();
pDC->Rectangle(50,50,50+sz.cx,50+sz.cy);
pDC->EndPath();
pDC->SelectClipPath(RGN_AND);

对于字体,我们在mfc编程中需要通过CFont类的对象,实现对字体的修改。我们可以通过多种函数初始化字体对象,其中CreatePointFont(300,”楷体”,NULL)就可以实现对CFont对象的初始化。设定好字体对象后,我们来利用SelectObject函数将指定字体载入设备描述表中。
我们通过SetTextColor设置文本颜色,通过GetBkColor()函数获得设备描述表中的背景色。利用TextOut函数输出文本到窗口,利用SetCaretPos函数重新自定插入符的位置。

现在我们来了解一下CString类的强大功能,该类拥有很多字符串相关的处理函数,并且重载了多种运算符,我们在mfc中编程的时候,一旦牵扯到字符操作,cstring是不二之选,其中Left函数是从指定字符左侧截取指定长度的字符并返回指定字符,GetLength()函数返回指定字符串的长度。

还有最后一个函数是DrawText,该函数在指定区域写入字符串,该函数最后一个参数控制对齐格式。
CClientDC dc(this);
CFont font;
font.CreatePointFont(300,”楷体”,NULL);
CFont *OldFont=dc.SelectObject(&font);

COLORREF clr=dc.SetTextColor(dc.GetBkColor());
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
m_strLine=m_strLine.Left(m_strLine.GetLength()-1);
dc.SetTextColor(clr);

dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);    

CPoint pt;
pt.x=m_ptOrigin.x+size.cx;
pt.y=m_ptOrigin.y;

SetCaretPos(pt); 
dc.SetTextColor(RGB(255,0,0));
dc.DrawText(s,rect,DT_LEFT);

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值