⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vertialrolltext.cpp

📁 一个关于怎样模拟双色球彩票的代码 非常好的哦~~ 直接在VC++6 可编译
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				); // 将一幅位图从一个设备场景复制到另一个
	
	// 替换旧位图
	imageDC.SelectObject(pOldImageDCBitmap);
	maskDC.SelectObject(pOldMaskDCBitmap);
	tempDC.SelectObject(pOldTempDCBitmap);
	memDC.SelectObject(pOldMemDCBitmap);

	return;
}

// 画位图
void CVertialRollText::DrawBitmap(CDC* pDC, CDC* pDC2, CRect *rBitmap)
{
	if (!m_bTransparent || m_bitmap.m_hObject != NULL) 
	{
    	pDC->BitBlt(rBitmap->left, 
			        rBitmap->top, 
					rBitmap->Width(), 
					rBitmap->Height(), 
           			pDC2, 
					0, 
					0, 
					SRCCOPY 
					); // 将一幅位图从一个设备场景复制到另一个
		return;
	}

	CDC memDC;  // // 内存DC实例
	memDC.CreateCompatibleDC( pDC );

	CBitmap bitmap;
	bitmap.CreateCompatibleBitmap( pDC, rBitmap->Width(), rBitmap->Height() );
	CBitmap* pOldMemDCBitmap = memDC.SelectObject( &bitmap );
		
	memDC.BitBlt(0, 
		         0, 
				 rBitmap->Width(), 
				 rBitmap->Height(), 
				 pDC2, 
				 0, 
				 0, 
				 SRCCOPY 
				 ); // 将一幅位图从一个设备场景复制到另一个

	CDC maskDC;  // 遮盖DC实例
	maskDC.CreateCompatibleDC(pDC);

	CBitmap maskBitmap;
	maskBitmap.CreateBitmap( rBitmap->Width(), rBitmap->Height(), 1, 1, NULL );
	CBitmap* pOldMaskDCBitmap = maskDC.SelectObject( &maskBitmap );
    memDC.SetBkColor(RGB(192,192,192));

	maskDC.BitBlt(0, 
		          0, 
				  rBitmap->Width(), 
				  rBitmap->Height(), 
				  &memDC, 
				  0, 
				  0, 
				  SRCCOPY 
				  ); // 将一幅位图从一个设备场景复制到另一个


	CDC imageDC;  // 图像DC实例
	CBitmap bmpImage;
	imageDC.CreateCompatibleDC( pDC );
	bmpImage.CreateCompatibleBitmap( pDC, rBitmap->Width(), rBitmap->Height() );
	CBitmap* pOldImageDCBitmap = imageDC.SelectObject( &bmpImage );

	imageDC.BitBlt(0, 
		           0, 
				   rBitmap->Width(), 
				   rBitmap->Height(), 
				   pDC, 
				   rBitmap->left, 
				   rBitmap->top, 
				   SRCCOPY
				   ); // 将一幅位图从一个设备场景复制到另一个

	// 创建背景色为黑色,文本颜色为白色
	memDC.SetBkColor(RGB(0,0,0));
	memDC.SetTextColor(RGB(255,255,255));
	memDC.BitBlt(0, 
		         0, 
				 rBitmap->Width(), 
				 rBitmap->Height(), 
				 &maskDC, 
				 0, 
				 0, 
				 SRCAND
				 ); // 将一幅位图从一个设备场景复制到另一个
	
	// 创建背景色为白色,文本颜色为黑色
	imageDC.SetBkColor(RGB(255,255,255));
	imageDC.SetTextColor(RGB(0,0,0));
	imageDC.BitBlt(0, 
		           0, 
				   rBitmap->Width(), 
				   rBitmap->Height(), 
				   &maskDC, 
				   0, 
				   0, 
				   SRCAND
				   ); // 将一幅位图从一个设备场景复制到另一个

    imageDC.BitBlt(0, 
		           0, 
				   rBitmap->Width(), 
				   rBitmap->Height(), 
				   &memDC, 
				   0, 
				   0,
				   SRCPAINT
				   ); // 将一幅位图从一个设备场景复制到另一个
 
	pDC->BitBlt(rBitmap->left, 
		        rBitmap->top, 
				rBitmap->Width(), 
				rBitmap->Height(), 
				&imageDC, 
				0, 
				0, 
				SRCCOPY 
				); // 将一幅位图从一个设备场景复制到另一个
	
	// 替换旧位图
	imageDC.SelectObject(pOldImageDCBitmap);
	maskDC.SelectObject(pOldMaskDCBitmap);
	memDC.SelectObject(pOldMemDCBitmap);
}

// 填充倾斜度
void CVertialRollText::FillGradient(CDC *pDC, 
									 CRect *m_ScrollRect, 
									 CRect *m_FillRect, 
									 COLORREF color)
{ 
	float fStep,fRStep,fGStep,fBStep;	    
	int nOnBand;  

	WORD R = GetRValue(color); // 红
	WORD G = GetGValue(color); // 绿
	WORD B = GetBValue(color); // 蓝
	
	// 计算每个段颜色的亮度值
	if (m_nGradient % 2)  
	{
		fRStep = (float)R / 255.0f;
		fGStep = (float)G / 255.0f;
		fBStep = (float)B / 255.0f;
	} 
	else 
	{
		fRStep = (float)(255-R) / 255.0f;
		fGStep = (float)(255-G) / 255.0f;
		fBStep = (float)(255-B) / 255.0f;
	}

	COLORREF OldCol = pDC->GetBkColor(); // 取得背景色

	fStep = (float)m_ScrollRect->Width() / 256.0f;
	for (nOnBand = (256*m_FillRect->left)/m_ScrollRect->Width(); 
		(int)(nOnBand*fStep) < m_FillRect->right && nOnBand < 256; nOnBand++) 
	{
		CRect r((int)(nOnBand * fStep), m_FillRect->top,
				(int)((nOnBand+1) * fStep), m_FillRect->bottom+1);
		COLORREF col;

		switch(m_nGradient) 
		{
		case GRADIENT_RIGHT_DARK: // 右边暗
			col = RGB((int)(R-nOnBand*fRStep),
				      (int)(G-nOnBand*fGStep),
					  (int)(B-nOnBand*fBStep));
			break;
		case GRADIENT_RIGHT_LIGHT: // 右边亮
			col = RGB((int)(R+nOnBand*fRStep),
				      (int)(G+nOnBand*fGStep),
					  (int)(B+nOnBand*fBStep));
			break;
		case GRADIENT_LEFT_DARK: // 左边暗
			col = RGB((int)(nOnBand*fRStep),
				      (int)(nOnBand*fGStep),
					  (int)(nOnBand*fBStep));
			break;
		case GRADIENT_LEFT_LIGHT: // 左边亮
			col = RGB(255 - (int)(nOnBand*fRStep),
				      255 - (int)(nOnBand*fGStep),
					  255 - (int)(nOnBand*fBStep));
			break;
		default:
			return;
		}

		pDC->FillSolidRect(&r, col); // 填充平滑区域
	}

	pDC->SetBkColor(OldCol); // 设置背景颜色
} 

#define SCROLLDC

// 移动信息
void CVertialRollText::MoveInfo(CDC* pDC, 
								 CRect& m_ScrollRect,
								 CRect& m_ClientRect, 
								 BOOL bCheck)
{
	CDC memDC,memDC2; // 内存DC实例
    memDC.CreateCompatibleDC(pDC);
    memDC2.CreateCompatibleDC(pDC);
    
	// 设定背景颜色
	COLORREF BackColor = (m_bTransparent && m_bitmap.m_hObject != NULL)? RGB(192,192,192) : m_arColors[BACKGROUND_COLOR];
	CBitmap *pOldMemDCBitmap = NULL;
	CBitmap	*pOldMemDC2Bitmap = NULL;

#ifdef SCROLLDC
	CRect r1;
#endif

	if (m_BmpMain.m_hObject == NULL) 
	{
		m_BmpMain.CreateCompatibleBitmap(pDC,
			                             m_ScrollRect.Width(), 
										 m_ScrollRect.Height() ); // 创建位图
		pOldMemDCBitmap = (CBitmap*)memDC.SelectObject(&m_BmpMain);
		if (m_nGradient && m_bitmap.m_hObject == NULL)
		{
			FillGradient(&memDC, 
				         &m_ScrollRect, 
						 &m_ScrollRect,
						 m_arColors[BACKGROUND_COLOR]
						 );  // 填充倾斜度
		}
		else
		{
			memDC.FillSolidRect(&m_ScrollRect,BackColor); // 填充平滑区域
		}
	} 
	else 
	{
		pOldMemDCBitmap = (CBitmap*)memDC.SelectObject(&m_BmpMain);
	}

	if (m_ClientRect.Width() > 0)  // 客户区宽度大于0
	{
#ifndef SCROLLDC
		CBitmap bitmap;
		bitmap.CreateCompatibleBitmap(pDC, 
			                          m_ClientRect.Width(), 
									  m_ClientRect.Height() ); // 创建位图
		pOldMemDC2Bitmap = memDC2.SelectObject(&bitmap);

		memDC2.BitBlt(0, 
			          0, 
					  m_ClientRect.Width(), 
					  m_ClientRect.Height() - abs(m_nScrollAmount), 
           	          &memDC, 
					  m_ClientRect.left, 
					  abs(m_nScrollAmount), 
					  SRCCOPY
					  ); // 将一幅位图从一个设备场景复制到另一个

		memDC.BitBlt(m_ClientRect.left, 
			         0, 
					 m_ClientRect.Width(), 
					 m_ClientRect.Height(), 
           	         &memDC2, 
					 0, 
					 0, 
					 SRCCOPY 
					 ); // 将一幅位图从一个设备场景复制到另一个

		
		memDC2.SelectObject(pOldMemDC2Bitmap);
		pOldMemDC2Bitmap = NULL;
#else
		CRgn RgnUpdate;
		memDC.ScrollDC(0,
			           m_nScrollAmount,
					   (LPCRECT)m_ScrollRect,
					   (LPCRECT)m_ClientRect,
					   &RgnUpdate,
					   (LPRECT)r1); // 滚动设备场景
    }
	else 
	{
		r1 = m_ScrollRect;
		r1.top = r1.bottom-abs(m_nScrollAmount);
#endif
	}

	m_nClip = m_nClip + abs(m_nScrollAmount);	
	
    CFont m_fntArial;
	CFont* pOldFont = NULL;
	BOOL bSuccess = FALSE;
	
	BOOL bUnderline;
	BOOL bItalic;
    int rmcode = 0;

	if (!m_csWork.IsEmpty()) // 工作区不为空
	{
		char c = m_csWork[m_csWork.GetLength()-1];
		if (c == m_arEscape[TOP_LEVEL_GROUP]) // 顶部水平组"溢出"
		{
			rmcode = 1;
			bItalic = FALSE;
			bUnderline = FALSE;
			m_nCurrentFontHeight = m_arTextHeight[TOP_LEVEL_GROUP_HEIGHT]; // 字体高度
   			bSuccess = m_fntArial.CreateFont(m_arTextHeight[TOP_LEVEL_GROUP_HEIGHT], 0, 0, 0, 
   								FW_BOLD, bItalic, bUnderline, 0, 
   								ANSI_CHARSET,
                   	    OUT_DEFAULT_PRECIS,
                   		CLIP_DEFAULT_PRECIS,
                   		PROOF_QUALITY,
                   		VARIABLE_PITCH | 0x04 | FF_DONTCARE,
                   		(LPSTR)"Arial"); // 创建字体

			memDC.SetTextColor(m_arColors[TOP_LEVEL_GROUP_COLOR]);
			if (pOldFont != NULL) memDC.SelectObject(pOldFont);
			pOldFont = memDC.SelectObject(&m_fntArial);
			
		}
		else if (c == m_arEscape[GROUP_TITLE]) // 组标题"溢出"
		{
			rmcode = 1;
			bItalic = FALSE;
			bUnderline = FALSE;
			m_nCurrentFontHeight = m_arTextHeight[GROUP_TITLE_HEIGHT];
   			bSuccess = m_fntArial.CreateFont(m_arTextHeight[GROUP_TITLE_HEIGHT], 0, 0, 0, 
   					   FW_BOLD, bItalic, bUnderline, 0, 
   					   ANSI_CHARSET,
                   	   OUT_DEFAULT_PRECIS,
                   	   CLIP_DEFAULT_PRECIS,
                   	   PROOF_QUALITY,
                   	   VARIABLE_PITCH | 0x04 | FF_DONTCARE,
                   	   (LPSTR)"Arial");

			memDC.SetTextColor(m_arColors[GROUP_TITLE_COLOR]);
			if (pOldFont != NULL) memDC.SelectObject(pOldFont);
			pOldFont = memDC.SelectObject(&m_fntArial);
		}
		else if (c == m_arEscape[TOP_LEVEL_TITLE]) // 顶部水平标题"溢出"
		{
			rmcode = 1;
			bItalic = FALSE;
			bUnderline = TRUE;
			bUnderline = FALSE;
			m_nCurrentFontHeight = m_arTextHeight[TOP_LEVEL_TITLE_HEIGHT];
			bSuccess = m_fntArial.CreateFont(m_arTextHeight[TOP_LEVEL_TITLE_HEIGHT], 0, 0, 0, 
					   FW_BOLD, bItalic, bUnderline, 0, 
					   ANSI_CHARSET,
	               	   OUT_DEFAULT_PRECIS,
	               	   CLIP_DEFAULT_PRECIS,
	               	   PROOF_QUALITY,
	               	   VARIABLE_PITCH | 0x04 | FF_DONTCARE,
	               	   (LPSTR)"Arial");
			memDC.SetTextColor(m_arColors[TOP_LEVEL_TITLE_COLOR]);
			if (pOldFont != NULL) memDC.SelectObject(pOldFont);
			pOldFont = memDC.SelectObject(&m_fntArial);
		}
		else if (c == m_arEscape[DISPLAY_BITMAP])  // 显示位图"溢出"
		{
			if (!m_bProcessingBitmap) // 不是正在处理的位图
			{
				CString szBitmap = m_csWork.Left(m_csWork.GetLength()-1);
				if (m_bmpWork.LoadBitmap((const char *)szBitmap)) 
				{
					BITMAP 	m_bmpInfo;

	   				m_bmpWork.GetObject(sizeof(BITMAP), &m_bmpInfo);
			
					m_size.cx = m_bmpInfo.bmWidth;	 // 位图宽度
					m_size.cy = m_bmpInfo.bmHeight;  // 位图高度

					m_pt.x = (m_ClientRect.right - 
							((m_ClientRect.Width())/2) - (m_size.cx/2));
					m_pt.y = m_ClientRect.bottom;
				
					m_bProcessingBitmap = TRUE;
					if (pOldMemDC2Bitmap != NULL) memDC2.SelectObject(pOldMemDC2Bitmap);
					pOldMemDC2Bitmap = memDC2.SelectObject(&m_bmpWork);
				}
				else
				{
					c = ' ';
				}
			}
			else  // 正在处理的位图
			{
				if (pOldMemDC2Bitmap != NULL) memDC2.SelectObject(pOldMemDC2Bitmap);
				pOldMemDC2Bitmap = memDC2.SelectObject(&m_bmpWork);
			}
		}
		else 
		{
			bItalic = FALSE;
			bUnderline = FALSE;
			m_nCurrentFontHeight = m_arTextHeight[NORMAL_TEXT_HEIGHT];
   			bSuccess = m_fntArial.CreateFont(m_arTextHeight[NORMAL_TEXT_HEIGHT], 0, 0, 0, 
   					   FW_THIN, bItalic, bUnderline, 0, 
   					   ANSI_CHARSET,
                   	   OUT_DEFAULT_PRECIS,
                       CLIP_DEFAULT_PRECIS,
                   	   PROOF_QUALITY,
                   	   VARIABLE_PITCH | 0x04 | FF_DONTCARE,
                   	   (LPSTR)"Arial"); // 创建字体

			memDC.SetTextColor(m_arColors[NORMAL_TEXT_COLOR]);
			if (pOldFont != NULL) memDC.SelectObject(pOldFont);
			pOldFont = memDC.SelectObject(&m_fntArial); // 替代旧字体
		}
	}

#ifndef SCROLLDC
	CRect r1(m_ScrollRect);
	r1.top = r1.bottom-abs(m_nScrollAmount);
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -