MFC Windows 程序设计(4)

 
文本 GDI 字体  CFont
CDC 文本函数
DrawText    在格式化矩形中显示文本
TextOut     在当前或指定位置输入一行文本
TabbedTextOut 输出一行憨厚制表符的文本
ExtTextOut 输入一行文本,并有选择地给矩形填充背景色或改变字符间距
GetTextExtent    计算当前字体下一个字符串的宽度
GetTabbedTextExtent 计算当前字体下含有制表符字符串的宽度
GetTextMetrics    返回当前字体的字体度量(字符高度、字符平均宽度等)
SetTextAlign      给输出函数设定对齐参数
SetTextJustification     确定对齐一串文本时需要增加的宽度
SetTextColor      设定设备描述表的文本输出颜色
SetBkColor       设定设备描述表的背景色,输入字符背后的填充色
创建 CFont
CFont myfont;
Myfont.CreatePointFont(120,_T(“Times New Roman”));
//
Myfont.CreateFont(nHeight,0,0,0,FW_NORMAL,0,0,0,DEFAULT_CHARSET,OUT_CHARACTER_PRECIS,CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_DONTCARE,_T(“Times New Roman”));
//
LOGFONT lf;
ZeroMemory(&lf,sizeof(lf));//内存清0
Lf.lfHeight=120;
Lf.lfWeight=FW_BOLD;
Lf.lftalic=TRUE;
Lstrcpy(lf.lfFaceName,_T(“Times New Roman”));//将一个文字字符串从一个内存位置复制到另一个位置。(C函数memset strcpy _lcscpy)
Myfont.CreatePointFontIndirect(&lf);
 
实例:
在OnPaint中 通过重画两次字符 实现阴影字符效果
void CMfctestView::OnPaint()
{
       CPaintDC dc(this); // device context for painting
      
       // TODO: Add your message handler code here
       CFont font;
       font.CreatePointFont(720,_T("Arial"));// 定义字体
       dc.SelectObject(&font);// 将字体选入设备描述表
       dc.SetBkMode(TRANSPARENT);// 设置透明背景 否则 默认白色背景会覆盖掉第一次绘制的阴影字体
       CString str=_T("Hello!");// 定义绘制的文字
       CRect rect;
       GetClientRect(&rect);// 绘制区域
       rect.OffsetRect(16,16);
       dc.SetTextColor(RGB(192,192,192));
       dc.DrawText(str,&rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER);// 绘制底层灰色阴影字体
       rect.OffsetRect(-16,-16);
       dc.SetTextColor(RGB(0,0,0));
       dc.DrawText(str,&rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER);// 绘制黑色文字
       // Do not call CView::OnPaint() for painting messages
}
★如果创建一个字体如:Arial 但系统中并没有安装这个字体,GDI会自动选择系统中与之相近的字样,而不是让这次调用失败。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值