【MFC开发(11)】静态文本框控件 StaticText

静态文本框控件 StaticText与分组控件类似,也没有什么响应函数,直接显示内容;

下面讲解一下如何去使用别人的模板来调用

项目下载地址A Gradient Static Control - CodeProject

添加文件到项目中,这里只需要2个文件

这里放一下代码吧

// GradientStatic.h#if !defined(AFX_GRADIENTSTATIC_H__0709E3A1_C8B6_11D6_B74E_004033A0FB96__INCLUDED_)
#define AFX_GRADIENTSTATIC_H__0709E3A1_C8B6_11D6_B74E_004033A0FB96__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// GradientStatic.h : header file
///
// CGradientStatic window
typedef UINT (CALLBACK* LPFNDLLFUNC1)(HDC,CONST PTRIVERTEX,DWORD,CONST PVOID,DWORD,DWORD);class CGradientStatic : public CStatic
{
// Construction
public:CGradientStatic();virtual ~CGradientStatic();void SetWindowText(LPCSTR a_lpstr);void SetColor(long cl) {clLeft=cl;};void SetGradientColor(long cl) {clRight=cl;};void SetTextColor(long cl) {clText=cl;};void SetReverseGradient();void SetLeftSpacing(int iNoOfPixels) { m_iLeftSpacing = iNoOfPixels; };void SetTextAlign(int iAlign ) { m_iAlign = iAlign; }; //0 - left, 1 - center, 2 -rightvoid SetVerticalGradient(BOOL a_bVertical = TRUE) { m_bVertical = a_bVertical; };static void DrawGradRect(CDC *pDC, CRect r, COLORREF cLeft, COLORREF cRight, BOOL a_bVertical);// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CGradientStatic)//}}AFX_VIRTUAL// Generated message map functions
protected:CString m_sTEXT;int m_iLeftSpacing;long clLeft;long clRight;long clText;int m_iAlign;HINSTANCE hinst_msimg32;BOOL m_bCanDoGradientFill;BOOL m_bVertical;LPFNDLLFUNC1 dllfunc_GradientFill;//{{AFX_MSG(CGradientStatic)afx_msg void OnPaint();//}}AFX_MSGDECLARE_MESSAGE_MAP()
};///{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_GRADIENTSTATIC_H__0709E3A1_C8B6_11D6_B74E_004033A0FB96__INCLUDED_)
// GradientStatic.cpp : implementation file
//#include "stdafx.h"
#include "GradientStatic.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/
// CGradientStaticBEGIN_MESSAGE_MAP(CGradientStatic, CStatic)//{{AFX_MSG_MAP(CGradientStatic)ON_WM_PAINT()//}}AFX_MSG_MAP
END_MESSAGE_MAP()/
// CGradientStatic message handlersCGradientStatic::CGradientStatic()
{m_bVertical = FALSE;m_iLeftSpacing = 10;clLeft = GetSysColor(COLOR_ACTIVECAPTION);clRight = GetSysColor(COLOR_BTNFACE);clText = GetSysColor(COLOR_CAPTIONTEXT);m_iAlign = 0;hinst_msimg32 = LoadLibrary( _T("msimg32.dll") );m_bCanDoGradientFill = FALSE;if(hinst_msimg32){m_bCanDoGradientFill = TRUE;		dllfunc_GradientFill = ((LPFNDLLFUNC1) GetProcAddress( hinst_msimg32, "GradientFill" ));}
}CGradientStatic::~CGradientStatic()
{FreeLibrary( hinst_msimg32 );
}//this function will be used only if msimg32.dll library is not available
void CGradientStatic::DrawGradRect(CDC *pDC, CRect r, COLORREF cLeft, COLORREF cRight, BOOL a_bVertical)
{CRect stepR;					// rectangle for color's bandCOLORREF color;				// color for the bandsfloat fStep;if(a_bVertical)fStep = ((float)r.Height())/255.0f;	elsefStep = ((float)r.Width())/255.0f;	// width of color's bandfor (int iOnBand = 0; iOnBand < 255; iOnBand++) {// set current bandif(a_bVertical){SetRect(&stepR,r.left, r.top+(int)(iOnBand * fStep),r.right, r.top+(int)((iOnBand+1)* fStep));	}else{SetRect(&stepR,r.left+(int)(iOnBand * fStep), r.top,r.left+(int)((iOnBand+1)* fStep), r.bottom);	}// set current colorcolor = RGB((GetRValue(cRight)-GetRValue(cLeft))*((float)iOnBand)/255.0f+GetRValue(cLeft),(GetGValue(cRight)-GetGValue(cLeft))*((float)iOnBand)/255.0f+GetGValue(cLeft),(GetBValue(cRight)-GetBValue(cLeft))*((float)iOnBand)/255.0f+GetBValue(cLeft));// fill current bandpDC->FillSolidRect(stepR,color);}
}void CGradientStatic::OnPaint() 
{CPaintDC dc(this); // device context for paintingCRect rect;GetClientRect(&rect);if(m_bCanDoGradientFill) //msimg32.dll library is loaded{TRIVERTEX rcVertex[2];rcVertex[0].x=rect.left;rcVertex[0].y=rect.top;rcVertex[0].Red=GetRValue(clLeft)<<8;	// color values from 0x0000 to 0xff00 !!!!rcVertex[0].Green=GetGValue(clLeft)<<8;rcVertex[0].Blue=GetBValue(clLeft)<<8;rcVertex[0].Alpha=0x0000;rcVertex[1].x=rect.right; rcVertex[1].y=rect.bottom;rcVertex[1].Red=GetRValue(clRight)<<8;rcVertex[1].Green=GetGValue(clRight)<<8;rcVertex[1].Blue=GetBValue(clRight)<<8;rcVertex[1].Alpha=0;GRADIENT_RECT rect;rect.UpperLeft=0;rect.LowerRight=1;// fill the area dllfunc_GradientFill( dc,rcVertex,2,&rect,1, m_bVertical ? GRADIENT_FILL_RECT_V : GRADIENT_FILL_RECT_H);}else{//msimg32.dll is not available. Let's use our own code to display gradient background.//This code is very simple and produces worse gradient that function from the library - but works!DrawGradRect(&dc,rect,clLeft,clRight,m_bVertical);}//let's set color defined by user::SetTextColor(dc,clText);HFONT hfontOld;CFont* pFont = GetFont();CString m_sTEXT;GetWindowText(m_sTEXT);if(pFont)hfontOld = (HFONT)SelectObject(dc.m_hDC, (HFONT)pFont->m_hObject);::SetBkMode(dc, TRANSPARENT);GetClientRect(&rect);if(m_iAlign == 1) // center::DrawText(dc, m_sTEXT, -1, &rect, DT_SINGLELINE|DT_VCENTER|DT_CENTER);else if(m_iAlign == 0) // left{rect.left+=m_iLeftSpacing;::DrawText(dc, m_sTEXT, -1, &rect, DT_SINGLELINE|DT_VCENTER|DT_LEFT);}else //right{rect.right-=m_iLeftSpacing;::DrawText(dc, m_sTEXT, -1, &rect, DT_SINGLELINE|DT_VCENTER|DT_RIGHT);}if(pFont)::SelectObject(dc.m_hDC, hfontOld);
}void CGradientStatic::SetReverseGradient()
{COLORREF cTemp = clLeft;clLeft = clRight;clRight = cTemp;
}void CGradientStatic::SetWindowText(LPCSTR a_lpstr)
{//CStatic::SetWindowText(a_lpstr);Invalidate();
}

然后新建一个static text控件,为其添加变量

	//使用模板中的类CGradientStatic m_static_text;

效果如下

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部