字体设置

1、MFC提供了CFont类专门用来设置字体,包括:CreateFont/CreateFontIndirect/CreatePointFont/CreatePointFontIndirect

  例: 

CFont font;
font.CreatePointFont(300,"黑体",NULL);
CFont *pOldFont=dc.SelectObject(&font);
...
dc.SelectObject(pOldFont);

若要实现功能完整的字处理程序,需利用MFC提供的CEditView/CRichEditView这两个类,后者的功能强于前者;如果让程序的视图窗口类直接派生于这两个类之一的话,程序就默认具备字处理程序的一些基本功能了。

2、字幕变色功能

  int DrawText( const CString& str, LPRECT lpRect, UINT nFormat );

  DrawText函数:在指定的矩形范围内输出文字;将其限制的显示范围覆盖在原位置的完整文本上,不断增加限制范围的宽度,并在限制范围内以不同颜色显示原文本内容,以达到卡拉OK的字幕变色效果:

  在CTextView类的OnCreate函数中设置定时器:

  SetTimer(非0值的定时器标识,定时间隔,NULL);

  //设置定时器

  SetTimer(1,100,NULL)

  给CTextView类添加WM_TIMER消息的响应函数:

  

  

  自动生成的响应函数OnTimer的nIDEvent参数即为定时器的标识,当程序有多个定时器时,可根据判断其标识的不同做不同的处理

  DrawText函数的第二个参数需要设置一个变量值来表示矩形限制范围的宽度,在CTextView类中添加一个成员变量:int m_nWidth,在CTextView类的构造函数中将该变量初始化为0

   

CTextView::CTextView()
{
    // TODO: add construction code here
    m_strLine="";
    m_ptOrigin=0;
    m_nWidth=0;
}

  该矩形限制范围的宽度由m_nWidth变量决定,高度由设备描述表中当前字体的高度决定(即需要显示的文本的高度);当完整文本全部输出完成后,应将矩形限制范围的宽度重置为0后再从新显示:  

void CTextView::OnTimer(UINT nIDEvent) 
{
    if(1==nIDEvent){ //判断定时器所对应的标识
        m_nWidth+=5;  //设置m_nWidth变量的值按5像素点增加

        CClientDC dc(this);
        //获取设备描述表中当前字体的信息
        TEXTMETRIC tm;
        dc.GetTextMetrics(&tm);

        //初始化DrawText函数所要限定的矩形范围
        CRect rect;
        rect.left=0;
        rect.top=200;
        rect.right=m_nWidth;
        rect.bottom=rect.top+tm.tmHeight;
        
        //将设备描述表中文本颜色设置为红色
        dc.SetTextColor(RGB(255,0,0));
        
        //获得要显示的字符串资源
        CString str;
        str.LoadString(IDS_STRING);
        
        dc.DrawText(str,rect,DT_LEFT);  //DT_LEFT/DT_RIGHT/DT_CENTER

        //获取需要显示的字符串的尺寸
        //当限制显示范围的矩形范围宽度超过字符串的宽度时,将该矩形范围宽度设为0,将字符串重新开始输出,并将已输出的文本颜色设为蓝色
        CSize sz=dc.GetTextExtent(str);
        if(m_nWidth>sz.cx){
            m_nWidth=0;
            dc.SetTextColor(RGB(0,0,255));
            dc.TextOut(0,200,str);
        }
    }
    CView::OnTimer(nIDEvent);
}
时间: 2024-11-05 03:20:31

字体设置的相关文章

CFileDialog(文件夹对话框类)和CFontDialog(字体设置对话框类)的使用学习

CFileDialog(文件夹对话框类) 主要用于文件的保存,另存,打开,关闭等功能 功能“另存为”的实现: 1 void CTXTDlg::OnFileSaveas() 2 { 3 LPCTSTR szFilter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||"; //过滤器设置,注意格式 4 CFileDialog fd(FALSE,"txt",NULL,OFN_OVERWRITEPROMPT|OFN_PATHMUSTEXIST| /

Emacs Org-mode中英文字体设置

Emacs Org-mode中英文字体设置 Table of Contents 1. 缺省字体存在的问题 2. 解决方法 2.1. 环境说明 2.2. 思路和方法 2.3. emacs设置代码 2.4. 显示效果 1 缺省字体存在的问题 一直在找一款能随心所欲记笔记的软件,近期发现了Org-mode,试用之后感觉确实非常好用. 不过,org-mode缺省字体在绘制表格时存在一个问题:因为中英文字体宽度不同,表格无法对齐.如下图所示: 2 解决方法 2.1 环境说明 本机环境为Mac OS X.E

Ubuntu字体设置

Ubuntu所带的字体不是很好看,比较模糊,现修改为微软雅黑 Win7安装分区下的 \windows\fonts\文件夹下,复制msyh.ttf和msyhhd.ttf到/home/m/msfonts文件夹下(m为我的用户名). 第一种方法: 如果只想添加到当前用户下,拷贝到/home/m/.fonts目录下,重启x即可. 第二种方法: 将字体放入字体文件夹 sudo sumkdir /usr/share/fonts/msfontscd /usr/share/fonts/msfontscp /ho

Eclipse中的字体设置

Eclipse是java开发者使用最广泛的开发工具,作为一名初学者,感觉Eclipse能对java中许多不同的字段进行颜色划分的功能非常实用,于是对Eclipse中的字体稍微进行了研究. 常见进行字体调整的界面有三种,1.基本的字体设置:2.程序编写界面的颜色设置:3.java程序内特殊字的颜色设置. 1.基本的字体设置 Windous->Preferences->General->Appearance->Basic 基本字体的设置 常用Text Font->Edit(右侧)

SecureCRT学习之道:SecureCRT常用快捷键设置与字体设置方法

常用快捷键: 全屏View->Full Screen 快捷键 Alt + Enter 菜单View 快捷键 Alt + V 打开新的终端 快捷键 Alt + B 字体设置: options->global options->general->Default session-> Edit Defalut Settings 网上有人建议用fixedsys,这个字体虽然不是最美丽的,但在终端上也是一个不错选择,大家都可以接受. 选择它,主要是因为它大小固定,在所有地方显示,效果都一

Android 字体设置-Typeface讲解

控件的字体设置的两种方式 常用的字体类型名称还有: Typeface.DEFAULT //常规字体类型 Typeface.DEFAULT_BOLD //黑体字体类型 Typeface.MONOSPACE //等宽字体类型 Typeface.SANS_SERIF //sans serif字体类型 常用的字体风格名称还有: Typeface.BOLD //粗体 Typeface.BOLD_ITALIC //粗斜体 Typeface.ITALIC //斜体 Typeface.NORMAL //常规 1

SecureCRT学习之道:SecureCRT经常使用快捷键设置与字体设置方法

1:假设不想每次登陆都输入password,能够在你打开的session里邮件session option->login action 选中automate logon 双击ogin 和assword分别输入username和password即可了,telnet的命令符为〉,敲入指令的命令符为# 2:假设在global option->terminal->emulation->mapped keys勾选CUA setting就会导致Linux命令下快捷键ctrl+C失效,假设勾选就

VBA在WORD中给表格外的字体设置为标题

使用VB可以将表外的字体设置标题字体实际操作如下: VB代码如下: Sub oliver_1() Selection.EndKey Unit:=wdStory '光标移到文末 For i = 1 To ActiveDocument.Tables.Count '有几个表格,下面操作就循环几次 With Application.Browser .Target = wdBrowseTable '插入点在表格中 .Previous '插入点移至前一张表格之前 End With Selection.Mov

xecjk 字体设置

%开始字体设置\setCJKmainfont[BoldFont={SimHei},ItalicFont={KaiTi}]{SimSun}                        \setCJKsansfont{SimHei}\setCJKmonofont{[SIMFANG.TTF]}\setCJKfamilyfont{zhsong}{SimSun}\setCJKfamilyfont{zhhei}{SimHei}\setCJKfamilyfont{zhkai}{KaiTi}\setCJKfa

Android 字体设置

囧里个囧 Android 字体设置 Android 对中文字体支持很不好~~ 需要加入相应的字体库 (1)创建布局Layout //创建线性布局 LinearLayout linearLayout=newLinearLayout(this); //设定线性布局为垂直方向 linearLayout.setOrientation(LinearLayout.VERTICAL); //以该线性布局做视图 setContentView(linearLayout); (2)针对正常字体 //普通正常字体 n