/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
文件名称 : ColorStatic.h 头文件 程 序 员 : 杨治忠
版权声明 : 版权归杨治忠所有 创建时间 : 2012-8-17 21:04:25 功能描述 : 彩色静态文本控件 修改历史 : 暂无修改过
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ #pragma once
//静态文本控件里的文字对齐方式 enum {
TEXTALIGN_LEFT = 0x01,//左对齐 TEXTALIGN_CENTER = 0x02,//中心齐 TEXTALIGN_RIGHT = 0x03,//右对齐
TEXTALIGN_TOP = 0x04,//顶对齐 TEXTALIGN_BOTTOM = 0x05,//底对齐 };
class CColorStatic : public CStatic {
DECLARE_DYNAMIC(CColorStatic) public: CColorStatic(); virtual ~CColorStatic(); protected:
DECLARE_MESSAGE_MAP() public:
afx_msg void OnPaint(); //仅供本类里用的变量 private:
CString str_StaticText; COLORREF rgb_TextColor; HBRUSH hbrush_BackColor; bool b_BackTransparent; int i_HTextAlign; int i_VTextAlign; CFont font_StaticText;
BOOL B_IsSingleLine; BOOL B_UseParentFont; int i_LineHeight; int i_TextHeight; int i_TextWidth; int i_TextYPos; int i_TextXPos; //对外的接口函数 public:
void SetStaticText(CString str_Text); void GetStaticText(CString &str_Text); void SetStaticBackColor(COLORREF rgb_Color); void SetStaticTextColor(COLORREF rgb_Color); void SetStaticBackTransparent(bool b_Tranparent=true); void SetStaticHTextAlign(int i_Align=TEXTALIGN_LEFT); void SetStaticVTextAlign(int i_Align=TEXTALIGN_TOP); void SetStaticTextFont(LOGFONT *lf);
void SetStaticTextFont(int nPointSize=100, CString szFaceName=_T(\"宋体\"));
BOOL SetStaticBorder(bool b_Border=true); BOOL SetStaticSunken(bool b_Sunken=true); };
/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
文件名称 : ColorStatic.cpp 源文件 程 序 员 : 杨治忠
版权声明 : 版权归杨治忠所有 创建时间 : 2012-8-17 21:05:23 功能描述 : 彩色静态文本控件 修改历史 : 暂无修改过
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ #include \"stdafx.h\" #include \"ColorStatic.h\"
IMPLEMENT_DYNAMIC(CColorStatic, CStatic) CColorStatic::CColorStatic() {
B_UseParentFont = FALSE; hbrush_BackColor
= ::CreateSolidBrush(GetSysColor(COLOR_3DFACE)); rgb_TextColor = ::GetSysColor(COLOR_WINDOWTEXT);
i_TextXPos = 1; i_TextYPos = 1; B_IsSingleLine = TRUE; b_BackTransparent = false;
i_HTextAlign = TEXTALIGN_CENTER; i_VTextAlign = TEXTALIGN_CENTER; //字体 LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
//strcpy(lf.lfFaceName, _T(\"宋体\"));//多字节的工程用 wcscpy(lf.lfFaceName, _T(\"宋体\"));//宽字节的工程用 lf.lfHeight = 14;
lf.lfItalic = 0; lf.lfUnderline = 0; lf.lfStrikeOut = 0;
lf.lfWeight = FW_NORMAL; font_StaticText.DeleteObject();
font_StaticText.CreateFontIndirect(&lf); }
CColorStatic::~CColorStatic() {
if(NULL != hbrush_BackColor)
{
::DeleteObject(hbrush_BackColor); } }
BEGIN_MESSAGE_MAP(CColorStatic, CStatic) ON_WM_PAINT() END_MESSAGE_MAP()
/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
函数名字 :OnPaint() 函数描述 :绘制
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
void CColorStatic::OnPaint() {
CPaintDC dc(this);
// TODO: 在此处添加消息处理程序代码 CRect rect_client; CBitmap bmp; CDC *pDCMem;
GetClientRect(&rect_client); if(!b_BackTransparent) {
pDCMem = new CDC;
pDCMem->CreateCompatibleDC(&dc);
bmp.CreateCompatibleBitmap(&dc, rect_client.Width(), rect_client.Height());
pDCMem->SelectObject(&bmp); } else {
pDCMem = &dc; }
pDCMem->SetBkMode(TRANSPARENT); if(!b_BackTransparent) {
CBrush br;
br.Attach(hbrush_BackColor);
pDCMem->FillRect(rect_client, &br); br.Detach(); }
pDCMem->SetTextColor(rgb_TextColor);
if(!B_UseParentFont) {
pDCMem->SelectObject(&font_StaticText); } //写文本
if(str_StaticText.Find(_T(\"\\n\")) >= 0) {
B_IsSingleLine = FALSE; } else {
B_IsSingleLine = TRUE; }
if(B_IsSingleLine) {//单行文本
CSize size = pDCMem->GetTextExtent(str_StaticText); i_TextWidth = size.cx ; i_TextHeight = size.cy ;
if(i_HTextAlign == TEXTALIGN_CENTER) {
i_TextXPos = (rect_client.Width() - i_TextWidth)/2; }
else if(i_HTextAlign == TEXTALIGN_RIGHT) {
i_TextXPos = rect_client.Width() - i_TextWidth; } else {
i_TextXPos = 1; }
if(i_VTextAlign == TEXTALIGN_CENTER) {
i_TextYPos = (rect_client.Height() - i_TextHeight)/2 + 1; }
else if(i_VTextAlign == TEXTALIGN_BOTTOM) {
i_TextYPos = rect_client.Height() - i_TextHeight; } else {
i_TextYPos = 1; }
pDCMem->TextOut(i_TextXPos, i_TextYPos, str_StaticText);
} else {//多行文本 TEXTMETRIC tm;
CString szShow(\"\"),szOthers(\"\"); szOthers = str_StaticText; int nPos = 0; int x = i_TextXPos; int y = i_TextYPos; i_TextWidth = 0; i_TextHeight = 0;
pDCMem->GetTextMetrics(&tm);
i_LineHeight = tm.tmHeight + tm.tmExternalLeading; while(!szOthers.IsEmpty()) {
nPos = szOthers.Find(_T(\"\\n\")); if(nPos >= 0) {
szShow = szOthers.Left(nPos);
szOthers = szOthers.Right(szOthers.GetLength() - nPos - 1);
pDCMem->TextOut(x, y, szShow);
y += i_LineHeight; } else {
szShow = szOthers; szOthers.Empty();
pDCMem->TextOut(x, y, szShow); } } }
if(!b_BackTransparent) {
dc.BitBlt(0, 0, rect_client.Width(), rect_client.Height(), pDCMem, 0, 0, SRCCOPY); delete pDCMem; } }
/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
函数名字 :SetStaticText( CString str_Text ) 函数描述 :设置静态文本控件文字
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
void CColorStatic::SetStaticText( CString str_Text ) {
if(str_StaticText != str_Text) {
str_StaticText = str_Text; Invalidate(); } }
/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
函数名字 :GetStaticText( CString &str_Text ) 函数描述 :获取静态文本控件名字
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
void CColorStatic::GetStaticText( CString &str_Text ) {
str_Text = str_StaticText;
}
/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
函数名字 :SetStaticBackColor( COLORREF rgb_Color ) 函数描述 :设置静态文本控件背景色
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
void CColorStatic::SetStaticBackColor( COLORREF rgb_Color ) {
if(hbrush_BackColor) {
::DeleteObject(hbrush_BackColor); }
hbrush_BackColor = ::CreateSolidBrush(rgb_Color); Invalidate(); }
/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
函数名字 :SetStaticTextColor( COLORREF rgb_Color ) 函数描述 :设置静态文本控件名字颜色
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
void CColorStatic::SetStaticTextColor( COLORREF rgb_Color ) {
rgb_TextColor = rgb_Color; Invalidate(); }
/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
函数名字 :SetStaticBackTransparent( bool b_Tranparent ) 函数描述 :设置静态文本控件背景是否透明 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
void CColorStatic::SetStaticBackTransparent( bool b_Tranparent) {
b_BackTransparent = b_Tranparent; Invalidate(); }
/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
函数名字 :SetStaticHTextAlign( int i_Align ) 函数描述 :设置静态文本控件名字水平对齐方式 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
void CColorStatic::SetStaticHTextAlign( int i_Align) {
i_HTextAlign = i_Align; Invalidate(); }
/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
函数名字 :SetStaticVTextAlign( int i_Align ) 函数描述 :设置静态文本控件名字垂直对齐方式 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
void CColorStatic::SetStaticVTextAlign( int i_Align ) {
i_VTextAlign = i_Align; Invalidate(); }
/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
函数名字 :SetStaticTextFont( LOGFONT *lf ) 函数描述 :设置静态文本控件名字字体
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
void CColorStatic::SetStaticTextFont( LOGFONT *lf ) {
B_UseParentFont = FALSE; font_StaticText.DeleteObject(); font_StaticText.CreateFontIndirect(lf); Invalidate(); }
/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
函数名字 :SetStaticTextFont( int nPointSize, CString szFaceName )
函数描述 :设置静态文本控件名字字体
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
void CColorStatic::SetStaticTextFont( int nPointSize, CString szFaceName ) {
if(szFaceName.IsEmpty()) { return; }
B_UseParentFont = FALSE; font_StaticText.DeleteObject();
font_StaticText.CreatePointFont(nPointSize, szFaceName); Invalidate(); }
/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
函数名字 :SetStaticBorder( bool b_Border) 函数描述 :设置静态文本控件是否有边框
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
BOOL CColorStatic::SetStaticBorder( bool b_Border) {
if(!b_Border) {
ModifyStyle(WS_BORDER, 0, SWP_DRAWFRAME); } else {
ModifyStyle(0, WS_BORDER, SWP_DRAWFRAME); }
return TRUE; }
/*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
函数名字 :SetStaticSunken( bool b_Sunken ) 函数描述 :设置静态文本控件是否凹凸
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/
BOOL CColorStatic::SetStaticSunken( bool b_Sunken ) {
if(!b_Sunken) {
ModifyStyleEx(WS_EX_STATICEDGE, 0, SWP_DRAWFRAME); } else {
ModifyStyleEx(0, WS_EX_STATICEDGE, SWP_DRAWFRAME); }
return TRUE; }
因篇幅问题不能全部显示,请点此查看更多更全内容