zoukankan      html  css  js  c++  java
  • 字体设置

    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);
    }
    
  • 相关阅读:
    递归 深拷贝
    js 基础复习(0)
    js数组冒泡排序,快速排序的原理以及实现
    .sass 和 .scss 区别
    ionic2-从搭建环境说起
    Unity3d截图保存到Android相册的实现
    总是要总结一年的工作(写给自己和想要从技术创业开公司的朋友们)
    初入职场(插曲-如何更称职的工作)
    初入职场(插曲-你的成长代价)
    初入职场(面试)
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/6916141.html
Copyright © 2011-2022 走看看