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

📄 ccreditsscroller.cpp

📁 Ov511+摄像头驱动源码 摄像头芯片必需为OV511+(如:网眼v2000),适用于Windows2000/Xp 1.运行本代码需安装windriver7.00和VC6.0
💻 CPP
字号:

//
// CCreditsScroller.cpp
// Implementation of CCreditsScroller
// Ryan Lederman, ryan@winprog.org
//
#include "stdafx.h"
#include "CCreditsScroller.h"

CCreditsScroller::CCreditsScroller(){}

BOOL CCreditsScroller::Initialize( HWND hWindow, HDC winDC, int iWidth, int iHeight, int iXpos, int iYpos, COLORREF clrBackground, COLORREF clrForeground, char *szFontName )
{
	//
	// Set underlying member variables to values passed, assuming they are valid.
	//

	if( iWidth <=0 || iHeight <=0 )
		return false;

	m_dcWinDC     = winDC;     /* Window DC to be drawn on */
	m_iDrawWidth  = iWidth;    /* Width of screen to be drawn */
	m_iDrawHeight = iHeight;   /* Height of screen to be drawn */
	m_iDrawX      = iXpos;     /* X-axis coordinate of upper left corner of screen to be drawn */
	m_iDrawY      = iYpos;     /* Y-axis coordinate of upper left corner of screen to be drawn */
	m_clrForeground = clrForeground;
	m_clrBackground = clrBackground;
	m_hWindow     = hWindow;
	m_iTextOutY   = iHeight;

	m_dcMemoryDC = CreateCompatibleDC( m_dcWinDC );

	if( m_dcMemoryDC == NULL )
		return false;


	m_hMemoryBitmap = CreateCompatibleBitmap( m_dcWinDC, m_iDrawWidth, m_iDrawHeight );

	if( m_hMemoryBitmap == NULL )
		return false;	

	SetTextColor( m_dcMemoryDC, m_clrForeground );
	SetBkColor( m_dcMemoryDC, m_clrBackground );

	SelectObject( m_dcMemoryDC, m_hMemoryBitmap );

	m_hBrushBackground = CreateSolidBrush( m_clrBackground );

	m_hFont = CreateFont( 0,0,0,0,FW_BOLD,0,0,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH, szFontName );

	SelectObject( m_dcMemoryDC, m_hFont );

	m_rectangle.left   = iXpos;
	m_rectangle.top    = iYpos;
	m_rectangle.right  = m_iDrawWidth;
	m_rectangle.bottom = m_iDrawHeight;

	m_buffer = NULL;
	return true;
}

BOOL CCreditsScroller::Start(HWND hWindow, int iMilliseconds, int iPixelStep )
{
	SCROLLSTRUCT scr;

	//
	// Make sure user didn't do something dumb
	//
	if( iMilliseconds <= 0 )
		return false;

	//
	// Begin timer
	//
	if( SetTimer( hWindow, 0, iMilliseconds, (TIMERPROC)TimerProc ) == 0 )
		return false;

	//
	// Call TextToScreen to calculate text's drawn height
	//
	if( !TextToScreen() )
		return false;

	//
	// Copy address of rectangle, handle to window drawn on, and pixels to step to TimerProc
	//
	scr.hHandle        = m_hWindow;
	scr.iPixelStep     = iPixelStep;
	scr.iTextOutHeight = m_iTextOutHeight;
	scr.iTextOutY      = &m_iTextOutY;
	scr.pRect          = &m_rectangle;

	TimerProc( NULL, WM_COPYDATA, 0, (DWORD)&scr );
	return true;
}

VOID CALLBACK CCreditsScroller::TimerProc( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime )
{
	static HWND hWnd;
	static int  iPixelStep = 0;
	static int  iTextOutHeight = 0;
	static int *pTextOutY = NULL;
	static RECT *pRect = NULL;
	int iMinY = 0;

	if( uMsg == WM_COPYDATA )
	{
		hWnd  = ((PSCROLLSTRUCT)dwTime)->hHandle;
		iPixelStep = ((PSCROLLSTRUCT)dwTime)->iPixelStep;
		iTextOutHeight = ((PSCROLLSTRUCT)dwTime)->iTextOutHeight;
		pTextOutY = ((PSCROLLSTRUCT)dwTime)->iTextOutY;
		pRect = ((PSCROLLSTRUCT)dwTime)->pRect;
	}

	iMinY = (0 - iTextOutHeight);

	if( *pTextOutY <= iMinY )
	{		
		*pTextOutY = pRect->bottom;
		KillTimer(hWnd, 0);
		ShowWindow(hWnd, SW_HIDE);
		DestroyWindow(hWnd);
	}

	*pTextOutY -= iPixelStep;

	InvalidateRect( hWnd, pRect, FALSE );
	UpdateWindow( hWnd );
}


BOOL CCreditsScroller::SetString( char *szString, int len )
{
	if( m_buffer )
		free( m_buffer );

	if( len <= 0 )
		return false;

	m_bufferlen = len;

	m_buffer = (char*)malloc( m_bufferlen );

	if( m_buffer == NULL )
		return false;

	memcpy( m_buffer, szString, m_bufferlen );

	return true;
}

BOOL CCreditsScroller::TextToScreen( void )
{
	DWORD dwRead = 0;
	RECT  rectangle;

	rectangle.top = 0;
	rectangle.bottom = 278;
	rectangle.left = 0;
	rectangle.right = 412;
	FillRect( m_dcMemoryDC, &rectangle, m_hBrushBackground );

	m_iTextOutHeight = DrawTextEx( m_dcMemoryDC, m_buffer, m_bufferlen, &rectangle, DT_CALCRECT, 0 );

	rectangle.top    = m_iTextOutY;
	rectangle.left   = 0;
	rectangle.right  = m_iDrawWidth;
	rectangle.bottom = m_iDrawHeight;

	DrawTextEx( m_dcMemoryDC, m_buffer, m_bufferlen, &rectangle, DT_CENTER, 0 );

	BitBlt( m_dcWinDC, m_iDrawX, m_iDrawY, m_iDrawWidth, m_iDrawHeight, m_dcMemoryDC, 0, 0, SRCCOPY );

	return true;
}


void CCreditsScroller::Cleanup( void )
{
	DeleteObject( m_hMemoryBitmap );
	DeleteDC( m_dcMemoryDC );
	DeleteObject( m_hBrushBackground );
	DeleteObject( m_hFont );
	if( m_buffer )
		free( m_buffer );
}

⌨️ 快捷键说明

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