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

📄 vertialrolltext.cpp

📁 一个关于怎样模拟双色球彩票的代码 非常好的哦~~ 直接在VC++6 可编译
💻 CPP
📖 第 1 页 / 共 3 页
字号:

	if (m_nGradient && m_bitmap.m_hObject == NULL)
	{
		FillGradient(&memDC, &m_ScrollRect, &r1, m_arColors[BACKGROUND_COLOR]); // 填充倾斜度
	}
	else
	{
		memDC.FillSolidRect(&r1,BackColor);
	}
	memDC.SetBkMode(TRANSPARENT);  // 设置背景为透明

	if (!m_bProcessingBitmap) // 不是正在处理的位图
	{
		if (bCheck) 
		{
			CSize size = memDC.GetTextExtent((LPCTSTR)m_csWork,
				                             m_csWork.GetLength() - rmcode);
			if (size.cx > m_nMaxWidth) // 大于最大宽度
			{
				m_nMaxWidth = (size.cx > m_ScrollRect.Width())? m_ScrollRect.Width():size.cx;
				m_ClientRect.left = (m_ScrollRect.Width()-m_nMaxWidth)/2;
				m_ClientRect.right = m_ClientRect.left + m_nMaxWidth;
			}
				
		}
		CRect r(m_ClientRect);
		r.top = r.bottom-m_nClip;
		int x = memDC.DrawText((const char *)m_csWork,m_csWork.GetLength()-rmcode,&r,DT_TOP|DT_CENTER|
					DT_NOPREFIX | DT_SINGLELINE); // 画文本	
		m_bDrawText=FALSE;
	}
	else // 正在处理的位图
	{
		if ( bCheck ) 
		{
			CSize size = memDC.GetTextExtent( (LPCTSTR)m_csWork,m_csWork.GetLength()-rmcode );
			if ( m_size.cx > m_nMaxWidth )
			{
				m_nMaxWidth = ( m_size.cx > m_ScrollRect.Width() )? m_ScrollRect.Width():m_size.cx;
				m_ClientRect.left = ( m_ScrollRect.Width()-m_nMaxWidth )/2;
				m_ClientRect.right = m_ClientRect.left + m_nMaxWidth;
			}
		}
		CRect r( m_pt.x, m_pt.y-m_nClip, m_pt.x+ m_size.cx, m_pt.y );
		DrawBitmap( &memDC, &memDC2, &r ); // 画位图

		if ( m_nClip >= m_size.cy )
		{
			m_bmpWork.DeleteObject();
			m_bProcessingBitmap = FALSE;
			m_nClip=0;
			m_csWork.Empty();
			m_nCounter=1;
		}
	}

	if ( pOldMemDC2Bitmap != NULL ) 
	{
		memDC2.SelectObject( pOldMemDC2Bitmap );
	}
	if ( pOldFont != NULL ) 
	{
		memDC.SelectObject( pOldFont );
	}
	memDC.SelectObject( pOldMemDCBitmap );

	return;
}

// 画信息
void CVertialRollText::DrawInfo( CDC* pDC, CRect& m_ScrollRect )
{
	if (m_BmpMain.m_hObject != NULL)
	{
		return;
	}

	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;

	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);
	}

	POSITION pos = m_csList.GetHeadPosition(); // 取得顶部位置
	int height = 0;
	while ( pos != NULL && height <= m_ScrollRect.Height() ) 
	{
		CString m_csWork = m_csList.GetNext( pos );
		CFont	m_fntArial;
		CFont	*pOldFont = NULL;
		CBitmap	*pOldMemDC2Bitmap = NULL;
		
		CDC memDC2;
		memDC2.CreateCompatibleDC( pDC ); // 创建内存DC	
	
		BOOL bSuccess = FALSE;
		BOOL bIsBitmap = FALSE;
		
		BOOL bUnderline;
		BOOL bItalic;
		int rmcode = 0;
        CBitmap bitmap; // 位图实例

		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] );
				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] );
				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] );
				pOldFont = memDC.SelectObject( &m_fntArial );
			}
			else if ( c == m_arEscape[DISPLAY_BITMAP] )  // 显示位图"溢出"
			{
				CString szBitmap = m_csWork.Left( m_csWork.GetLength()-1 );

				if ( bitmap.LoadBitmap((const char *)szBitmap) )
				{
					BITMAP 	m_bmpInfo;

	   				bitmap.GetObject(sizeof(BITMAP), &m_bmpInfo);
			
					m_size.cx = m_bmpInfo.bmWidth;	
					m_size.cy = m_bmpInfo.bmHeight;

					m_pt.x = ( m_ScrollRect.right - 
						((m_ScrollRect.Width())/2) - (m_size.cx/2) );
					m_pt.y = height;
					pOldMemDC2Bitmap = memDC2.SelectObject( &bitmap );
					bIsBitmap = TRUE;
				}
				else
				{
						c = ' ';
				}
			}
			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] );
				pOldFont = memDC.SelectObject( &m_fntArial );
			}
		}

		memDC.SetBkMode( TRANSPARENT ); // 设置背景为透明

		if ( !bIsBitmap ) // 不是位图
		{				
			CRect r( m_ScrollRect );
			r.top = height;
			CSize size;
			if ( m_csWork.GetLength()-rmcode != 0 ) 
			{
				int x = memDC.DrawText( (const char *)m_csWork,m_csWork.GetLength() - rmcode,&r,DT_TOP|DT_CENTER|
						DT_NOPREFIX | DT_SINGLELINE ); // 画文本	
				size = memDC.GetTextExtent( (LPCTSTR)m_csWork,m_csWork.GetLength() - rmcode );
			}
			else
			{
				size = memDC.GetTextExtent((LPCTSTR)"W",1);
			}
			height += size.cy;
		}
		else // 是位图
		{
			CRect r( m_pt.x, m_pt.y, m_pt.x + m_size.cx, m_pt.y + m_size.cy );
			DrawBitmap(&memDC, &memDC2, &r); // 画位图
    		
			height += m_size.cy;
		}

		if ( pOldMemDC2Bitmap != NULL )
		{
			memDC2.SelectObject(pOldMemDC2Bitmap); // 替换旧位图
		}

		if ( pOldFont != NULL )
		{
			memDC.SelectObject(pOldFont); // 替换旧字体
		}
	}
	memDC.SelectObject(pOldMemDCBitmap); // 替换旧位图

	return;
}

// 设定背景图
BOOL CVertialRollText::SetBkImage(UINT nIDResource)
{
    return SetBkImage( (LPCTSTR)nIDResource );
}

// 设定背景图
BOOL CVertialRollText::SetBkImage(LPCTSTR lpszResourceName)
{
    if ( m_bitmap.m_hObject != NULL )
	{
		m_bitmap.DeleteObject(); // 删除位图对象
	}
    if ( m_pal.m_hObject != NULL )
	{
		m_pal.DeleteObject(); // 删除调色板对象
	}
     
    HBITMAP hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), 
                                        lpszResourceName, 
										IMAGE_BITMAP, 
										0,
										0, 
										LR_CREATEDIBSECTION 
										); // 上载位图

     if ( hBmp == NULL ) 
	 {
        return FALSE;
	 }

	m_bitmap.Attach( hBmp ); // 贴上位图
    BITMAP bm;
    m_bitmap.GetBitmap( &bm ); // 取得位图
    m_cxBitmap = bm.bmWidth;
    m_cyBitmap = bm.bmHeight;

    DIBSECTION ds;
    BITMAPINFOHEADER &bmInfo = ds.dsBmih;
    m_bitmap.GetObject( sizeof(ds), &ds );

    int nColors = bmInfo.biClrUsed ? bmInfo.biClrUsed : 1 << bmInfo.biBitCount;

 
    CClientDC dc(NULL);             
    if ( nColors > 256 )
	{
        m_pal.CreateHalftonePalette( &dc ); // 创建中间色调色板
	}
    else
    {
        // 创建调色板
        RGBQUAD *pRGB = new RGBQUAD[nColors];
        CDC memDC;
        memDC.CreateCompatibleDC(&dc); // 创建内存DC

        CBitmap* pOldMemDCBitmap = memDC.SelectObject( &m_bitmap );
        ::GetDIBColorTable( memDC, 0, nColors, pRGB );

        UINT nSize = sizeof( LOGPALETTE ) + ( sizeof(PALETTEENTRY) * nColors );
        LOGPALETTE *pLP = ( LOGPALETTE * ) new BYTE[nSize];

        pLP->palVersion = 0x300;
        pLP->palNumEntries = nColors;

        for ( int i=0; i < nColors; i++) // 为调色板设定颜色
        {
            pLP->palPalEntry[i].peRed = pRGB[i].rgbRed;
            pLP->palPalEntry[i].peGreen = pRGB[i].rgbGreen;
            pLP->palPalEntry[i].peBlue = pRGB[i].rgbBlue;
            pLP->palPalEntry[i].peFlags = 0;
        }

        m_pal.CreatePalette( pLP );

		memDC.SelectObject( pOldMemDCBitmap ); // 替换旧的位图
        delete[] pLP;
        delete[] pRGB;
    }

    return TRUE;
}

// 擦掉背景
BOOL CVertialRollText::OnEraseBkgnd( CDC* pDC ) 
{
	return TRUE;	
}

// 释放资源
void CVertialRollText::OnDestroy() 
{
	CStatic::OnDestroy();
	
	m_csList.RemoveAll();

	if (m_nTimerOn)
	{
		ASSERT(KillTimer(DISPLAY_TIMER_ID));
	}

	return;		
}

// 绘图
void CVertialRollText::OnPaint() 
{
	CPaintDC dc( this ); 
	
	if ( m_nTimerOn ) 
	{
		return;
	}

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

	CBitmap *pOldMemDCBitmap = NULL;
	CRect m_ScrollRect;
	GetClientRect(&m_ScrollRect); // 取得客户区

	if (m_BmpMain.m_hObject == NULL) 
	{
		CDC memDC2;
		CBitmap bitmap;
		memDC2.CreateCompatibleDC(&dc); // 创建内存DC
		bitmap.CreateCompatibleBitmap(&dc, 
			                          m_ScrollRect.Width(), 
									  m_ScrollRect.Height() 
									  ); // 创建位图
		CBitmap *pOldMemDC2Bitmap = ( CBitmap* )memDC2.SelectObject( &bitmap ); // 替换位图
		
		DrawInfo(&memDC2, m_ScrollRect); // 画信息
		AddBackGround( &memDC2, m_ScrollRect, m_ScrollRect ); // 添加背景

		pOldMemDCBitmap = (CBitmap*)memDC.SelectObject(&m_BmpMain);
        memDC.BitBlt(0, 
			         0, 
					 m_ScrollRect.Width(), 
					 m_ScrollRect.Height(), 
                     &memDC2, 
					 0, 
					 0, 
					 SRCCOPY 
					 ); // 将一幅位图从一个设备场景复制到另一个

		memDC2.SelectObject( pOldMemDC2Bitmap ); // 替换旧的位图
	}
	else
	{
		pOldMemDCBitmap = (CBitmap*)memDC.SelectObject(&m_BmpMain);
	}
       
	dc.BitBlt(0, 
		      0, 
			  m_ScrollRect.Width(), 
			  m_ScrollRect.Height(), 
			  &memDC, 
			  0, 
			  0, 
			  SRCCOPY
			  ); // 将一幅位图从一个设备场景复制到另一个	

	return;
}

⌨️ 快捷键说明

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