最近,因为工作比较紧张一个月都没有写文章了。由于工作的需要我自己封装几个基本控件,有按钮、进度条、列表框、静态文本域、动态文本域、时钟、对话框等基本控件。
下面我们来解释一下文本域(静态文本)的封装实现,文本域包括以下几个部分:
1、 字体的大小
2、 字体颜色
3、 字体显示的区域
4、 文本域的背景
现在我们搞清楚了文本包括以上部分,就可以开始封装文本控件。
首先,在代码定义一个文本属性结构体:
namespace Text
{
struct Property
{
RECT rcWndPos; //文字显示的位置
TSTRING strText;//显示的文本
UINT uFormat; //绘制文本的格式
int iPointSize; //文字的高度
int iBkMode; //文字背景格式
COLORREF crTextColor; //文字颜色
COLORREF crBkColor; //背景颜色
int iWeight; //文字的宽度
BOOL bItalic; //是否为斜体
BOOL bUnderline; //是否要下划线
BOOL bStrikeOut; //是否要删除线
TSTRING strFaceName; //字体名称
};
}
再定义一个文本窗口属性结构体:
namespace TextWnd
{
struct Property
{
TSTRING strBkImage; //文本窗口背景图片路径
RECT rcDrawPosition;//文本窗口位置
RECT rcImagePosition;//背景图片的显示区域
BOOL bTransparent; //是否过滤透明色
COLORREF crTransparentColor;//透明颜色
Text::Property proText; //为位置属性
};
}
有了上面两个结构体我们就可以通过我编写的文本框来显示我们想要的字体。在这里先教大家怎么使用我封装的文本类,之后我再把代码列出来。
//TxtPro
Text::Property TxtPro;//定义文本属性对象
TxtPro.rcWndPos = CreateRect(0,0,215,15);
TxtPro.crBkColor = RGB(0,255,0);
TxtPro.crTextColor = RGB(255,255,255);
TxtPro.iPointSize = 16;
TxtPro.iWeight = 600;
TxtPro.strText = TEXT("Text");;
TxtPro.strFaceName = TEXT("新宋体");
TxtPro.iBkMode = TRANSPARENT;
TxtPro.uFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS ;
TxtPro.bStrikeOut = FALSE;
TxtPro.bUnderline = FALSE;
TxtPro.bItalic = FALSE;
//TxtWndPro
TextWnd::Property TxtWndPro; //定义文本窗口属性对象
TxtWndPro.rcDrawPosition = CreateRect(250,100,550,200);
TxtWndPro.proText = TxtPro;
TxtWndPro.proText.rcWndPos = CreateRect(0,0,300,100);
TxtWndPro.proText.iPointSize = 40;
TxtWndPro.proText.iWeight = 800;
CTextWnd txtWnd; //定义文本窗口对象
txtWnd.SetProperty(TxtWndPro); //设置属性
//完成了以上步骤下面只要通过下面一步就可以看到一个文本框了
txtWnd.Create(父窗口指针,TEXT("文本框"));//创建文本窗口
//要改变文本内容可以调用:
txtWnd. SetText(TEXT("填写你要显示的文本"));
//返回文本
TSTRING strText = txtWnd.GetText();
//改变显示的位置
RECT rcPos ={0,0,100,100};
txtWnd. SetTextPosition(rcPos);
实现源代码如下:
//TextWnd.h
//TextWnd.cpp