MFC控件自绘-Static Text

来源:互联网 发布:软件的生存周期 编辑:程序博客网 时间:2024/05/23 22:43

MFC使用Static Text显示文本,想改变字体和显示方式很麻烦,用ActiveX中的Label控件可以很好的解决Static Text存在的问题,但使用时需要装微软的那一套东西(以前写的程序 用了Label,必须安装微软办公软件才能运行),着实让人心烦。

能不能实现一个方便的文本显示控件呢?纠结了半天,一会百度,一会CSDN,着实花了我一番功夫,最后在别人的基础上改进了一些东东,还是让我给实现了得意,虽然没有Label那么强大,但还是很好用的。


//////////////////////////////////////////////////////ULabel.h/////////////////////////////////////////////////////////////

#pragma once

class ULabel : public CStatic
{
public:
ULabel();
virtual ~ULabel();


private:
CFont*  m_pFont;
CFont font;
COLORREF m_clrFont;                                     // 字体颜色
COLORREF m_clrBack;                                     // 背景颜色
BOOL m_bTransparent;                                    // 是否透明


public:
void SetULabel(CString _strFontName, UINT _nFontSize, UINT _nWeight,
COLORREF _clrFont, COLORREF _clrBack, BOOL _bTransparent);


protected:
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
DECLARE_DYNAMIC(ULabel)
};

//////////////////////////////////////////////////////ULabel.h/////////////////////////////////////////////////////////////


////////////////////////////////////////////////////ULabel.cpp///////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ULabel.h"


IMPLEMENT_DYNAMIC(ULabel, CStatic)


ULabel::ULabel()
: m_bTransparent(FALSE)
{
int     nCount;
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));


//设置字体样式
nCount  = sizeof(lf.lfFaceName)/sizeof(TCHAR);
_tcscpy_s(lf.lfFaceName, nCount, TEXT("宋体"));
lf.lfHeight  = 12;
lf.lfWeight  = 2;
lf.lfCharSet = GB2312_CHARSET;


m_pFont = new CFont;
m_pFont->CreateFontIndirect(&lf);
}


ULabel::~ULabel()
{
if(m_pFont != NULL)
{
delete m_pFont;
}

}




BEGIN_MESSAGE_MAP(ULabel, CStatic)
ON_WM_PAINT()
END_MESSAGE_MAP()




void ULabel::OnPaint()
{
CPaintDC dc(this);
RECT rect;
CString strCaption;


GetWindowText(strCaption);
GetClientRect(&rect);
dc.SetTextColor(m_clrFont);


if (m_bTransparent)
{
dc.SetBkMode(TRANSPARENT);
}
else
{
dc.SetBkColor(m_clrBack);
}


dc.SelectObject(*m_pFont);
dc.DrawText(strCaption, &rect, DT_SINGLELINE | DT_VCENTER | DT_LEFT);
}


void ULabel::SetULabel(CString _strFontName, UINT _nFontSize, UINT _nWeight,
COLORREF _clrFont, COLORREF _clrBack, BOOL _bTransparent)
{
m_clrFont = _clrFont; 
m_clrBack = _clrBack;
m_bTransparent = _bTransparent;   


int     nCount;
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));


//设置字体样式
nCount  = sizeof(lf.lfFaceName)/sizeof(TCHAR);
_tcscpy_s(lf.lfFaceName, nCount, _strFontName);
lf.lfHeight  = _nFontSize;
lf.lfWeight  = _nWeight;
lf.lfCharSet = GB2312_CHARSET;


delete m_pFont;
m_pFont = new CFont;
m_pFont->CreateFontIndirect(&lf);
}

////////////////////////////////////////////////////ULabel.cpp///////////////////////////////////////////////////////////

0 0
原创粉丝点击