简单封装的一个彩色进度条【原创】

原创 2004年12月28日 20:24:00














 once 

 CGradientProgressCtrl :  CProgressCtrl
{

	CGradientProgressCtrl()					;	
	 ~CGradientProgressCtrl()			;	

	  SetPos( nPos)					;	
	  SetStep( nStep)					;	
	 SetRange( nLower,  nUpper)			;	
	  SetText(  * pText, BOOL bRepaint  TRUE)	;	


	 ShowPercent(BOOL bShowPercent  TRUE)	{ m_bShowPercent  bShowPercent; }	    
	 ShowText(BOOL bShowText  TRUE)		{ m_bShowText  bShowText; }    


	COLORREF GetTextColor()	{  m_clrText	; }		
	COLORREF GetBkColor()		{  m_clrBkGround	; }	
	COLORREF GetStartColor()	{  m_clrStart	; }		
	COLORREF GetEndColor()		{  m_clrEnd		; }	
	 SetStartColor(COLORREF color)	{ m_clrStart	 color ; }		
	 SetEndColor(COLORREF color)	{ m_clrEnd	 color ; }		
	 SetTextColor(COLORREF color)	{ m_clrText	 color ; }		
	 SetBkColor(COLORREF color)						        
	{
		m_clrBkGround  color ;
		m_BKGroundBrush.DeleteObject();
		m_BKGroundBrush.CreateSolidBrush(m_clrBkGround);
	}


	 Draw(CPaintDC* pDC,  RECT& rectClient,  & nMaxWidth);
	afx_msg  OnPaint();
	DECLARE_MESSAGE_MAP()


	
				m_nLower			;	
				m_nUpper			;	
				m_nStep			        ;	
				m_nCurPos			;	
	COLORREF m_clrStart		        ;	
	COLORREF	m_clrEnd		;	
	COLORREF	m_clrBkGround		;	
	COLORREF	m_clrText		;	
	BOOL		m_bShowPercent		;	
	BOOL		m_bShowText		;	

			m_Text[]		;	
			m_Percent[]		;	

	CBrush		m_BKGroundBrush		;	
	CBrush		m_TempBrush		;        


	
	 CMemDC :  CDC			
	{

		CMemDC(CDC* pDC):CDC()
		{
			ASSERT(pDC  NULL);

			m_pDC  pDC;
			m_pOldBitmap  NULL;
			m_bMemDC  !pDC>IsPrinting();
			
			 (m_bMemDC)
			{
				pDC>GetClipBox(&m_rect);
				CreateCompatibleDC(pDC);
				m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height());
				m_pOldBitmap  SelectObject(&m_bitmap);
				SetWindowOrg(m_rect.left, m_rect.top);
			}
				
			{
				m_bPrinting  pDC>m_bPrinting;
				m_hDC  pDC>m_hDC;
				m_hAttribDC  pDC>m_hAttribDC;
			}
		}
		 ~CMemDC()
		{
			 (m_bMemDC)
			{
				m_pDC>BitBlt(m_rect.left, 
					     m_rect.top, 
					     m_rect.Width(),
					     m_rect.Height(), 
					     , 
					     m_rect.left, 
					     m_rect.top,
					     SRCCOPY
					     );
				SelectObject(m_pOldBitmap);
			}
			
			{
				m_hDC  m_hAttribDC  NULL;
			}
		}
		CMemDC* >()
		{
			 ;
		}
		 CMemDC*()
		{
			 ;
		}

		CBitmap m_bitmap;
		CBitmap* m_pOldBitmap;  		
		CDC* m_pDC; 			        
		CRect m_rect;   			
		BOOL m_bMemDC;  			
	};

};














  
  

CGradientProgressCtrl::CGradientProgressCtrl()
{
	
	m_nLower	         		;
	m_nUpper	         	        ;
	m_nCurPos	         		;
	m_nStep                  		;

	
	m_clrStart	 COLORREF(RGB(, , ))		;
	m_clrEnd		 COLORREF(RGB(, , ))	;
	m_clrBkGround	 ::GetSysColor(COLOR_3DFACE)	        ;
	m_clrText		 COLORREF(RGB(, , ))	;

	
	m_bShowPercent	 TRUE ;
	m_bShowText	 TRUE ;

	m_BKGroundBrush.CreateSolidBrush(m_clrBkGround)	;
	memset(m_Text, , );
}

CGradientProgressCtrl::~CGradientProgressCtrl()
{
	m_BKGroundBrush.DeleteObject();
}

BEGIN_MESSAGE_MAP(CGradientProgressCtrl, CProgressCtrl)
	ON_WM_PAINT()
END_MESSAGE_MAP()




 CGradientProgressCtrl::SetRange( nLower,  nUpper)
{
	
	m_nLower	 nLower ;
	m_nUpper	 nUpper ;
	m_nCurPos	 nLower ;

	CProgressCtrl::SetRange(nLower, nUpper);
	CProgressCtrl::SetPos(nLower);
}

 CGradientProgressCtrl::SetStep( nStep)
{
	
	m_nStep  nStep;
	 (CProgressCtrl::SetStep(nStep));
}

 CGradientProgressCtrl::SetPos( nPos)
{
	
	m_nCurPos  nPos;
	 (CProgressCtrl::SetPos(nPos));
}

 CGradientProgressCtrl::SetText(  * pText, BOOL bRepaint)
{
	
	strcpy(m_Text, pText);
	 (bRepaint && m_bShowText)
	{
		Invalidate(TRUE);
	}

	 ;
}

 CGradientProgressCtrl::OnPaint()
{
	CPaintDC dc(); 

	
	RECT rectClient;
	GetClientRect(&rectClient);

	 (m_nCurPos < m_nLower  m_nCurPos > m_nUpper)
	{
		
		dc.FillRect(&rectClient, &m_BKGroundBrush);
		;
	}

	
	 maxWidth(() m_nCurPos /() m_nUpper*() rectClient.right);
	Draw(&dc, rectClient, () maxWidth);

	
	dc.SetTextColor(m_clrText);
	dc.SetBkMode(TRANSPARENT);
	HGDIOBJ hOldFont  ::SelectObject(dc.m_hDC, ::GetStockObject(DEFAULT_GUI_FONT));
	 (m_bShowPercent)
	{
		
		sprintf(m_Percent, ,() ( * () m_nCurPos / m_nUpper));
		dc.DrawText(m_Percent, &rectClient, DT_VCENTER  DT_CENTER  DT_SINGLELINE);
	}
	 (m_bShowText)
	{
		
		rectClient.left  (rectClient.left  rectClient.right) / ;
		dc.DrawText(m_Text, &rectClient, DT_VCENTER  DT_CENTER  DT_SINGLELINE);
	}
	::SelectObject(dc.m_hDC, hOldFont);

	
}

 CGradientProgressCtrl::Draw(CPaintDC* pDC,  RECT& rectClient,  & nMaxWidth)
{
	RECT rectFill;			
	 fStep;			
	CMemDC memDC(pDC);	

	 r, g, b;
	 rStep, gStep, bStep;
	
	r  (GetRValue(m_clrEnd)  GetRValue(m_clrStart));
	g  (GetGValue(m_clrEnd)  GetGValue(m_clrStart));
	b  (GetBValue(m_clrEnd)  GetBValue(m_clrStart));
	
	 nSteps  max(abs(r), max(abs(g), abs(b)));
	
	fStep  () rectClient.right / () nSteps;
	
	rStep  r / () nSteps;
	gStep  g / () nSteps;
	bStep  b / () nSteps;

	r  GetRValue(m_clrStart);
	g  GetGValue(m_clrStart);
	b  GetBValue(m_clrStart);
	
	 ( iOnBand  ; iOnBand < nSteps; iOnBand)
	{
		::SetRect(&rectFill, () (iOnBand * fStep), ,
			() ((iOnBand  ) * fStep), rectClient.bottom  );

		VERIFY(m_TempBrush.CreateSolidBrush(RGB(r  rStep * iOnBand,
										g  gStep * iOnBand,
										b  bStep * iOnBand)));
		memDC.FillRect(&rectFill, &m_TempBrush);
		VERIFY(m_TempBrush.DeleteObject());
		
		 (rectFill.right > nMaxWidth)
		{
			::SetRect(&rectFill, rectFill.right, , rectClient.right,
				rectClient.bottom);
			VERIFY(m_TempBrush.CreateSolidBrush(m_clrBkGround));
			memDC.FillRect(&rectFill, &m_TempBrush);
			VERIFY(m_TempBrush.DeleteObject());
			;
		}
	}
}
 

简单封装的一个彩色进度条【原创】

简单封装的一个彩色进度条【原创】 //=========================================================//// Copyright (c) 2000-...
  • mynote
  • mynote
  • 2005年02月23日 08:25
  • 1177

LInux:shell 彩色进度条实现(有图有代码有真相!!!)

一、进度条原理(以前的博客详细讲述过):http://blog.csdn.net/sharp_up/article/details/55506555 二、颜色设置 // 字体颜范围(前景颜...
  • Sharp_UP
  • Sharp_UP
  • 2017年07月02日 18:47
  • 454

用js写一个简单的进度条

进度条 *{margin:0;padding:0;} #bar{ width:100%; height:30px; background-color:#ccc; overflow:hi...
  • u013247277
  • u013247277
  • 2017年04月26日 12:46
  • 1067

一个部分封装的漂亮进度条

 document.execCommand("BackgroundImageCache",false,true);function ProcessBar(obj){   this.isMov...
  • ytbada
  • ytbada
  • 2007年04月13日 16:07
  • 568

【C语言】实现彩色的进度条

【Linux】shell脚本实现进度条
  • LX18792732127
  • LX18792732127
  • 2017年07月14日 17:10
  • 457

实现一个简单的进度条

提纲:本文主要说明了Linux系统和Windows系统下回车和换行的区别,以及Linux下缓冲区的问题,最后运用这两点知识实现一个简单的进度条。 一、关于回车和换行 不同操作系统下的回车和换行 ...
  • LP9127
  • LP9127
  • 2017年04月13日 12:19
  • 185

CSS3制作一个简单的进度条

这里只是一个小demo,一个用CSS3写的进度条。 如图所示:具体代码如下: new document ...
  • qq_24147051
  • qq_24147051
  • 2017年05月23日 13:57
  • 475

474_画一个复杂节点进度条

画一个复杂节点进度条 现在要一个进度条 有6个节点,然后中间是线条连接 准备2个bitmap         Bitmap point = BitmapFact...
  • qq_33781658
  • qq_33781658
  • 2017年02月20日 21:48
  • 633

简单易用的进度条 基于HTML5实现

Insert title here .jdtbox { padding: 10px 0; } .jdt_dbg { background: #fce5e5; width: 1...
  • u012882577
  • u012882577
  • 2016年05月30日 10:59
  • 1185

shell语法的简单学习以及编写一个简单的进度条

shell的语法学习和进度条的简单实现
  • qq_35116371
  • qq_35116371
  • 2017年07月17日 21:07
  • 207
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简单封装的一个彩色进度条【原创】
举报原因:
原因补充:

(最多只允许输入30个字)