您好,欢迎来到筏尚旅游网。
搜索
您的当前位置:首页背景透明,设置背景色,设置字体色,重载静态文本控件

背景透明,设置背景色,设置字体色,重载静态文本控件

来源:筏尚旅游网
背景透明,设置背景色,设置字体色,重载静态文本控件

/*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; }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- efsc.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务