//========================================================================
//TITLE:
//    CText类使用例程
//AUTHOR:
//    norains
//DATE:
//    Tuesday  17-April-2007
//Environment:
//        EVC4.0 + Standard SDK 4.2
//        EVC4.0 + Standard SDK 5.0
//========================================================================

CText是为了方便在屏幕中输出文本而封装的类.该类将复杂的设置操作封装成简单的函数,便于代码书写的简便性.

该类使用简单,示例如下:

//设置显示范围

 txtInfo.SetPosition(&rcWnd);

//设置字体颜色

 txtInfo.SetTextColor(RGB(255,0,0));

//设置字体磅值,0为默认的字体大小

 txtInfo.SetTextHeight(0);

//设置显示的文本

 txtInfo.SetText(TEXT("测试"));

//设置格式,该参数和DrawText()相同

 txtInfo.SetFormat(DT_RIGHT);

//绘制文本

 txtInfo.Draw(hdc);

默认的是透明显示,如果需要显示背景颜色,可以如下操作:
       
    //设置背景色

 txtInfo.SetBkColor(RGB(0,0,233));

//OPAQUE为绘制背景色

 txtInfo.SetBkMode(OPAQUE);

然后再调用Draw进行绘制即可.

    
/**////
// Text.h: interface for the CText class.
//
//Version: 
//    1.0
//Data:
//    2007.03.27   
/**///

#ifndef TEXT_H
#define TEXT_H


//------------------------------------------------------------------
class CText  
...{
public:
    void GetPosition(RECT * prcOut);
    void SetTextHeight(int iHeight);
    void SetFormat(UINT uFormat);
    void SetBkColor(COLORREF crColor);
    void SetTextColor(COLORREF crColor);
    BOOL SetBkMode(int iMode);
    void Draw(HDC hdc);
    BOOL SetText(const TCHAR *pszText);
    void SetPosition(const RECT *prc);
    CText();
    virtual ~CText();
protected:
    RECT m_rcWndPos;    
    TCHAR *m_pszText;
    ULONG m_ulSizeText;
    UINT m_uFormat;
    int m_iTextHeight;
    int m_iBkMode;
    COLORREF m_crTextColor;
    COLORREF m_crBkColor;

};

#endif // #ifndef TEXT_H

/**///
// Text.cpp: implementation of the CText class.
//
/**///

#include "stdafx.h"
#include "Text.h"


//--------------------------------------------------------------------
//Macro define
#define DEFAULT_BKMODE            TRANSPARENT
#define DEFAULT_TEXT_COLOR        RGB(0,0,0)
#define DEFAULT_BK_COLOR        RGB(255,255,255)
#define DEFAULT_FORMAT            (DT_LEFT | DT_SINGLELINE)
#define DEFAULT_TEXT_HEIGHT        0


//--------------------------------------------------------------------
/**///
// Construction/Destruction
/**///

CText::CText()
...{
    memset(&m_rcWndPos,0,sizeof(m_rcWndPos));
    m_pszText = NULL;
    m_ulSizeText = 0;
    m_iBkMode = DEFAULT_BKMODE;
    m_crTextColor = DEFAULT_TEXT_COLOR;
    m_crBkColor = DEFAULT_BK_COLOR;
    m_uFormat = DEFAULT_FORMAT;
    m_iTextHeight = DEFAULT_TEXT_HEIGHT;
}

CText::~CText()
...{
    if(m_pszText != NULL)
    ...{
        delete [] m_pszText;
        m_pszText = NULL;
    }
}

//--------------------------------------------------------------------
//Description:
//    Set the control position
//
//--------------------------------------------------------------------
void CText::SetPosition(const RECT *prc)
...{
    m_rcWndPos = *prc;
}


//--------------------------------------------------------------------
//Description:
//    Set the text. If you want to display the text ,you should call the Display()
//
//--------------------------------------------------------------------
BOOL CText::SetText(const TCHAR *pszText)
...{
    ULONG ulLen = _tcslen(pszText);

    if(m_pszText == NULL)
    ...{        
        m_pszText = new TCHAR [ulLen + 1];
        
        if(m_pszText == NULL)
        ...{
            return FALSE;
        }

        m_ulSizeText = ulLen + 1;
    }
    else if(ulLen + 1 > m_ulSizeText)
    ...{
        delete [] m_pszText;

        m_pszText = new TCHAR [ulLen + 1];
        
        if(m_pszText == NULL)
        ...{
            return FALSE;
        }

        m_ulSizeText = ulLen + 1;
    }

    _tcscpy(m_pszText,pszText);

    return TRUE;
}


//--------------------------------------------------------------------
//Description:
//    Display the text stored.
//
//--------------------------------------------------------------------
void CText::Draw(HDC hdc)
...{
    COLORREF crOldTextColor = ::SetTextColor(hdc,m_crTextColor);
    COLORREF crOldBkColor = ::SetBkColor(hdc,m_crBkColor);
    int iOldMode = ::SetBkMode(hdc,m_iBkMode);

    LOGFONT lf = ...{0};
    HFONT hFontNew, hFontOld;
    lf.lfQuality = CLEARTYPE_QUALITY;
    lf.lfHeight = -1 * (m_iTextHeight * GetDeviceCaps(hdc,LOGPIXELSY) / 72); //pound
    hFontNew = CreateFontIndirect(&lf);
    hFontOld = (HFONT) SelectObject(hdc, hFontNew);

    DrawText(hdc,m_pszText,-1,&m_rcWndPos,m_uFormat);

    SelectObject(hdc, hFontOld);
    DeleteObject(hFontNew);

    ::SetTextColor(hdc,crOldTextColor);
    ::SetBkColor(hdc,crOldBkColor);
    ::SetBkMode(hdc,iOldMode);
}


//--------------------------------------------------------------------
//Description:
//    Set the background mode.
//
//Parameters:
//    iMode: [in] The value is just like as follow:
//        OPAQUE      -- Background is filled with the current background color before the text, 
//                        hatched brush, or pen is drawn. 
//        TRANSPARENT -- Background remains untouched. 

//--------------------------------------------------------------------
BOOL CText::SetBkMode(int iMode)
...{
    if(iMode == OPAQUE || iMode == TRANSPARENT)
    ...{
        m_iBkMode = iMode;
        return TRUE;
    }
    else
    ...{
        return FALSE;
    }
}


//--------------------------------------------------------------------
//Description:
//    Set the text color
//
//--------------------------------------------------------------------
void CText::SetTextColor(COLORREF crColor)
...{
    m_crTextColor = crColor;
}


//--------------------------------------------------------------------
//Description:
//    Set the background color
//
//--------------------------------------------------------------------
void CText::SetBkColor(COLORREF crColor)
...{
    m_crBkColor = crColor;
}

//--------------------------------------------------------------------
//Description:
//    Set Format.
//
//Parameters:
//    The value you should see the uFormat of DrawText()
//--------------------------------------------------------------------
void CText::SetFormat(UINT uFormat)
...{
    m_uFormat = uFormat;
}


//--------------------------------------------------------------------
//Description:
//    Set the height of text as pound
//
//---------------------------------------------------------------------
void CText::SetTextHeight(int iHeight)
...{
    m_iTextHeight = iHeight;
}


//--------------------------------------------------------------------
//Description:
//    Get the position as rect
//
//---------------------------------------------------------------------
void CText::GetPosition(RECT *prcOut)
...{
    *prcOut = m_rcWndPos;
}

CText类使用例程相关推荐

  1. win32以动态链接库导出类及其成员变量

    本文转自:http://hi.baidu.com/ah_leo/blog/item/eccf12f49a0ebce07709d744.html 通常我们在vc程序时候,希望把自己的代码隐藏起来,做成d ...

  2. 物联网平台搭建的全过程介绍(三)阿里云物联网设备接入订阅发布之Android studio例程

    物联网平台搭建系列内容前两节介绍的都是功能性的描述,今天以一个小例子,介绍具体的设备接入.订阅.发布的操作,例子的名字为:学生成绩录入平台,例子的界面如下图所示. 功能描述:当在阿里云物联网平台内下发 ...

  3. 微信/易信公共平台开发(一):开发了一个简单易用的PHP类(提供源码),十几行代码搞定一个公众号

    这两天学习了一下微信公共平台和易信公共平台的开发 (易信与微信协议是基本一样的)(PS:没听说过易信?你out了?) 公共平台开发原理这里就不讲了,如果是初次接触的同学,建议先看 David_Tang ...

  4. java runnable 匿名_匿名类实现Runnable接口 | 学步园

    15.2.3  使用Runnable接口 我们知道,Java中的类只能够是单继承,也就是说,如果一个类为了使用线程而继承了Thread类,它就不能再继承别的类了.这很可能给编程带来不便.本节中介绍的就 ...

  5. 框架和库有什么区别? [关闭]

    框架和库有什么区别? 我一直认为库是一组对象和函数,专注于解决特定问题或应用程序开发的特定领域(即数据库访问); 另一方面,框架是一个以特定方法(即MVC)为中心的图书馆集合,涵盖了应用程序开发的所有 ...

  6. Delphi的单元文件详解

    Delphi的单元文件详解 Delphi单元文件 1.库单元文件头:其中声明了库单元的名字. 2.Interface部分:   由保留字interface开始,结束于保留字implementation ...

  7. Tensorflow 入门手册(代码与原理释义)

    ·人工智能与深度学习 -人工智能={机器学习,........else} -机器学习={深度学习(表示学习),........else} ·神经网络 ·卷积神经网络(Convolutional Neu ...

  8. python面向对象的特征_03 Python 关键点讲解:面向对象的机制

    本节开始讲解量化交易系统最基本的编程工具 Python 的关键知识点.我们经过调研发现,目前市面上量化交易相关的书籍.课程等教学产品多数从最基础的安装.语法.函数-开始介绍 Python 这个工具,我 ...

  9. 使用“ Row_Number”功能和WHILE循环创建滚动平均值报告

    介绍 ( Introduction ) A few days ago I received an email from a gentleman in the healthcare industry. ...

  10. openmvg中cmd模块解析

    ---恢复内容开始--- 在openmvg库中,定义了一个CmdLine类来定义例程的输入参数格式.源文件为.\openMVG\src\third_party\cmdLine\cmdLine.h. 先 ...

最新文章

  1. cmd命令简单别木马的蛛丝马迹
  2. 十一、递归----迷宫问题
  3. JS进阶篇--JS数组reduce()方法详解及高级技巧
  4. JSP和Servlet面试题精选
  5. 【数据结构与算法】之深入解析“二叉树的序列化与反序列化”的求解思路与算法示例
  6. 【BZOJ4242】水壶(克鲁斯卡尔重构树,BFS)
  7. 工信部高级软件工程师证书有用吗_考bim工程师证书有用吗
  8. vins-mono中在rviz可视化下如何在world坐标系中让视角跟着相机移动
  9. ES6——Class 的继承 笔记
  10. 实习成长之路:设计模式一:为什么你明明使用面向对象设计语言总写面向过程的程序?
  11. yb3防爆电机型号含义_YBX3防爆电机
  12. A星寻路 A星算法优化
  13. 怎么让照片里的人嘴巴动起来_让照片动起来软件下载-让照片动起来制作软件下载-西西软件下载...
  14. 苹果六电池_苹果新产品发布,这次加量不加价!
  15. 计算机无法识别u盘,电脑无法读取u盘怎么处理_电脑不能读取u盘如何解决
  16. 如何上传到GitHub的main分支而不是master分支
  17. Polyspace应用:Bug Finder检测代码漏洞
  18. ubuntu 20.04安装cuda
  19. 基于空间金字塔网络的光流估计
  20. datawhale组队学习task9—文件与文件系统

热门文章

  1. JAVA 通过POI实现Excel从单元格选择下拉选项
  2. Python Sorted Containers
  3. 买到Windows新电脑必做的6个优化设置(强烈建议)
  4. 【ELM分类】基于matlab鲸鱼算法优化核极限学习机数据分类【含Matlab源码 2012期】
  5. CDR案例:广告条幅banner设计
  6. STM32入门:STM32F401CDU6库函数工程文件搭建
  7. 【Code pratice】——星期一、猜年龄、合并检测、生日蜡烛
  8. 看图写英语作文关于计算机,终于懂了看图写英语作文模板
  9. python 人脸识别活体检测_人脸识别 -- 活体检测(张嘴摇头识别)
  10. sql语句中日期相减的操作