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

📄 coolcontrolsmanager.cpp

📁 打印数据生成和模拟
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		if ( dwStyle & TBS_LEFT )
			;
		else if ( dwStyle & TBS_BOTH )
			rc.left -= 1;
		else
			rc.left -= 2;
		
		rc.right = rc.left + h;
	}
	
	// Draw the channel rect
	if ( m_nState & dsHoverMask )
		Draw3dBorder( hDC, rc, COLOR_3DSHADOW, COLOR_3DHIGHLIGHT,                         
		COLOR_3DDKSHADOW, COLOR_3DLIGHT );
	else
		Draw3dBorder( hDC, rc, COLOR_3DSHADOW, COLOR_3DHIGHLIGHT,                         
		COLOR_3DFACE, COLOR_3DFACE );
	
	// Draw the slider thumb
	if ( !( dwStyle & TBS_NOTHUMB ) )
	{
		SetRectEmpty( &rc );
		SendMessage( m_hWnd, TBM_GETTHUMBRECT, 0, (LPARAM)&rc );
		DrawThumb( hDC, rc );
	}
	
	ReleaseDC( m_hWnd, hDC );
}

//////////////////////////////////////////////////////////////////////////////
// CCMToolbar class

void CCoolControlsManager::CCMToolbar::DrawButton( HDC hDC, const RECT& rc, int nState )
{
	if ( nState & bsChecked )
	{
		if ( nState & bsHover )
			Draw3dBorder( hDC, rc,
			COLOR_3DDKSHADOW, COLOR_3DHIGHLIGHT,
			COLOR_3DSHADOW, COLOR_3DSHADOW );
		else
			Draw3dBorder( hDC, rc,
			COLOR_3DSHADOW, COLOR_3DHIGHLIGHT,
			COLOR_3DFACE, COLOR_3DFACE );
	}
	else
	{
		if ( nState & bsHover )
			Draw3dBorder( hDC, rc,
			COLOR_3DHIGHLIGHT, COLOR_3DDKSHADOW,
			COLOR_3DLIGHT, COLOR_3DSHADOW );
		else
			Draw3dBorder( hDC, rc,
			COLOR_3DHIGHLIGHT, COLOR_3DSHADOW,
			COLOR_3DFACE, COLOR_3DFACE );
	}
}

void CCoolControlsManager::CCMToolbar::DrawControl( HDC hDC, const RECT& /*rc*/ )
{
	if ( GetWindowLong( m_hWnd, GWL_STYLE ) & TBSTYLE_FLAT ) // Skip flat toolbars
		return;
	
	int nCount = SendMessage( m_hWnd, TB_BUTTONCOUNT, 0, 0L );
	
	hDC = GetDC( m_hWnd );  // We will draw toolbar buttons on the client DC
	
	POINT point;
	GetCursorPos( &point );
	ScreenToClient( m_hWnd, &point );
	
	m_nOldItem = -1;
	int nState = 0;
	
	for ( int i = 0; i < nCount; i++ )
	{     
		RECT rc;       
		TBBUTTON ti;
		SendMessage( m_hWnd, TB_GETBUTTON, i, (LPARAM)&ti );
		SendMessage( m_hWnd, TB_GETITEMRECT, i, (LPARAM)&rc );
		
		if ( !( ti.fsStyle & TBSTYLE_SEP ) )
		{                  
			nState = ( ti.fsState & TBSTATE_CHECKED ) ? bsChecked : bsNormal;
			if ( PtInRect( &rc, point ) == TRUE )
			{
				if ( ti.fsState & TBSTATE_ENABLED )
					nState |= bsHover;
				m_nOldItem = i;
			}         
			DrawButton( hDC, rc, nState );
		}
	}
	
	ReleaseDC( m_hWnd, hDC );
}

BOOL CCoolControlsManager::CCMToolbar::NeedRedraw( const POINT& point )
{
	int nCount = SendMessage( m_hWnd, TB_BUTTONCOUNT, 0, 0L );
	
	POINT pt = point;
	ScreenToClient( m_hWnd, &pt );
	int nItem = -1;                
	for ( int i = 0; i < nCount; i++ )
	{            
		TBBUTTON ti;      
		SendMessage( m_hWnd, TB_GETBUTTON, i, (LPARAM)&ti );
		
		if ( !( ti.fsStyle & TBSTYLE_SEP ) )
		{
			RECT rc;         
			SendMessage( m_hWnd, TB_GETITEMRECT, i, (LPARAM)&rc );
			if ( PtInRect( &rc, pt ) )
			{
				nItem = i;
				break;
			}
		}
	}
	
	if ( m_hWnd != m_hWndOld || ( m_hWnd == m_hWndOld && m_nOldItem != nItem ) )
		return TRUE;
	return FALSE;
}

LRESULT CCoolControlsManager::CCMToolbar::WindowProc( UINT uMsg, WPARAM wParam, LPARAM lParam )
{
	switch ( uMsg )
	{  
	case WM_PAINT:
	case WM_NCPAINT:
		m_nOldItem = -1;   // Redraw the whole toolbar unconditionally
		
	default:
		return CCMControl::WindowProc( uMsg, wParam, lParam );
	}
}

//////////////////////////////////////////////////////////////////////////////
// CCMTabControl class

void CCoolControlsManager::CCMTabControl::DrawTab( HDC hDC, const RECT& rect, 
												  int nItem, int nState )
{
	RECT rc = rect;
	int nCurSel = SendMessage( m_hWnd, TCM_GETCURSEL, 0, 0L );
	if ( nCurSel == -1 )
		nCurSel = -2;
	
	switch ( GetOrientation() )
	{
	case tabLeft:
		if ( nState & bsChecked )
		{
            rc.top -= 2;
            rc.bottom += 2;
            rc.left -= 2;
            rc.right += 1;
		}
		
		if ( nState & bsHover )
		{
            if ( nCurSel != nItem - 1 )
            {
				FillSolidRect( hDC, rc.left+2, rc.top, rc.right-rc.left-2, 1, GetSysColor( COLOR_3DHIGHLIGHT ) );
				FillSolidRect( hDC, rc.left+2, rc.top+1, rc.right-rc.left-2, 1, GetSysColor( COLOR_3DLIGHT ) );
				SetPixel( hDC, rc.left+1, rc.top+1, GetSysColor( COLOR_3DHIGHLIGHT ) );
            }
			
            FillSolidRect( hDC, rc.left, rc.top+2, 1, rc.bottom-rc.top-4, GetSysColor( COLOR_3DHIGHLIGHT ) );
            FillSolidRect( hDC, rc.left+1, rc.top+2, 1, rc.bottom-rc.top-4, GetSysColor( COLOR_3DLIGHT ) );
			
            if ( nCurSel != nItem + 1 )
            {
				FillSolidRect( hDC, rc.left+2, rc.bottom-1, rc.right-rc.left-2, 1, GetSysColor( COLOR_3DDKSHADOW ) );
				FillSolidRect( hDC, rc.left+2, rc.bottom-2, rc.right-rc.left-2, 1, GetSysColor( COLOR_3DSHADOW ) );                        
				SetPixel( hDC, rc.left+1, rc.bottom-2, GetSysColor( COLOR_3DDKSHADOW ) );
            }
		}
		else
		{
            if ( nCurSel != nItem - 1 )
            {
				FillSolidRect( hDC, rc.left+2, rc.top, rc.right-rc.left-2, 1, GetSysColor( COLOR_3DHIGHLIGHT ) );
				FillSolidRect( hDC, rc.left+2, rc.top+1, rc.right-rc.left-2, 1, GetSysColor( COLOR_3DFACE ) );
				SetPixel( hDC, rc.left+1, rc.top+1, GetSysColor( COLOR_3DHIGHLIGHT ) );
            }
			
            FillSolidRect( hDC, rc.left, rc.top+2, 1, rc.bottom-rc.top-4, GetSysColor( COLOR_3DHIGHLIGHT ) );
            FillSolidRect( hDC, rc.left+1, rc.top+2, 1, rc.bottom-rc.top-4, GetSysColor( COLOR_3DFACE ) );
			
            if ( nCurSel != nItem + 1 )
            {
				FillSolidRect( hDC, rc.left+2, rc.bottom-1, rc.right-rc.left-2, 1, GetSysColor( COLOR_3DSHADOW ) );
				FillSolidRect( hDC, rc.left+2, rc.bottom-2, rc.right-rc.left-2, 1, GetSysColor( COLOR_3DFACE ) );                        
				SetPixel( hDC, rc.left+1, rc.bottom-2, GetSysColor( COLOR_3DSHADOW ) );
            }
		}       
		break;
		
	case tabTop:
		if ( nState & bsChecked )
		{
            rc.top -= 2;
            rc.bottom += 1;
            rc.left -= 2;
            rc.right += 2;
		}
		
		if ( nState & bsHover )
		{
            if ( nCurSel != nItem - 1 )
            {
				FillSolidRect( hDC, rc.left, rc.top+2, 1, rc.bottom-rc.top-2, GetSysColor( COLOR_3DHIGHLIGHT ) );
				FillSolidRect( hDC, rc.left+1, rc.top+2, 1, rc.bottom-rc.top-2, GetSysColor( COLOR_3DLIGHT ) );
				SetPixel( hDC, rc.left+1, rc.top+1, GetSysColor( COLOR_3DHIGHLIGHT ) );
            }
			
            FillSolidRect( hDC, rc.left+2, rc.top, rc.right-rc.left-4, 1, GetSysColor( COLOR_3DHIGHLIGHT ) );
            FillSolidRect( hDC, rc.left+2, rc.top+1, rc.right-rc.left-4, 1, GetSysColor( COLOR_3DLIGHT ) );
			
            if ( nCurSel != nItem + 1 )
            {
				FillSolidRect( hDC, rc.right-1, rc.top+2, 1, rc.bottom-rc.top-2, GetSysColor( COLOR_3DDKSHADOW ) );
				FillSolidRect( hDC, rc.right-2, rc.top+2, 1, rc.bottom-rc.top-2, GetSysColor( COLOR_3DSHADOW ) );            
				SetPixel( hDC, rc.right-2, rc.top+1, GetSysColor( COLOR_3DDKSHADOW ) );
            }                       
		}
		else
		{
            if ( nCurSel != nItem - 1 )
            {
				FillSolidRect( hDC, rc.left, rc.top+2, 1, rc.bottom-rc.top-2, GetSysColor( COLOR_3DHIGHLIGHT ) );
				FillSolidRect( hDC, rc.left+1, rc.top+2, 1, rc.bottom-rc.top-2, GetSysColor( COLOR_3DFACE ) );
				SetPixel( hDC, rc.left+1, rc.top+1, GetSysColor( COLOR_3DHIGHLIGHT ) );
            }
			
            FillSolidRect( hDC, rc.left+2, rc.top, rc.right-rc.left-4, 1, GetSysColor( COLOR_3DHIGHLIGHT ) );
            FillSolidRect( hDC, rc.left+2, rc.top+1, rc.right-rc.left-4, 1, GetSysColor( COLOR_3DFACE ) );
			
            if ( nCurSel != nItem + 1 )
            {
				FillSolidRect( hDC, rc.right-1, rc.top+2, 1, rc.bottom-rc.top-2, GetSysColor( COLOR_3DSHADOW ) );
				FillSolidRect( hDC, rc.right-2, rc.top+2, 1, rc.bottom-rc.top-2, GetSysColor( COLOR_3DFACE ) );                        
				SetPixel( hDC, rc.right-2, rc.top+1, GetSysColor( COLOR_3DSHADOW ) );
            }
		}       
		break;
		
	case tabRight:
		if ( nState & bsChecked )
		{
            rc.top -= 2;
            rc.bottom += 2;
            rc.right += 2;
            rc.left -= 1;
		}
		
		if ( nState & bsHover )
		{
            if ( nCurSel != nItem - 1 )
            {
				FillSolidRect( hDC, rc.left, rc.top, rc.right-rc.left-2, 1, GetSysColor( COLOR_3DHIGHLIGHT ) );
				FillSolidRect( hDC, rc.left, rc.top+1, rc.right-rc.left-2, 1, GetSysColor( COLOR_3DLIGHT ) );
				SetPixel( hDC, rc.right-2, rc.top+1, GetSysColor( COLOR_3DHIGHLIGHT ) );
            }
			
            FillSolidRect( hDC, rc.right-1, rc.top+2, 1, rc.bottom-rc.top-4, GetSysColor( COLOR_3DDKSHADOW ) );
            FillSolidRect( hDC, rc.right-2, rc.top+2, 1, rc.bottom-rc.top-4, GetSysColor( COLOR_3DSHADOW ) );
			
            if ( nCurSel != nItem + 1 )
            {
				FillSolidRect( hDC, rc.left, rc.bottom-2, rc.right-rc.left-2, 1, GetSysColor( COLOR_3DSHADOW ) );
				FillSolidRect( hDC, rc.left, rc.bottom-1, rc.right-rc.left-2, 1, GetSysColor( COLOR_3DDKSHADOW ) );
				SetPixel( hDC, rc.right-2, rc.bottom-2, GetSysColor( COLOR_3DDKSHADOW ) );
            }
		}
		else
		{
            if ( nCurSel != nItem - 1 )
            {
				FillSolidRect( hDC, rc.left, rc.top, rc.right-rc.left-2, 1, GetSysColor( COLOR_3DHIGHLIGHT ) );
				FillSolidRect( hDC, rc.left, rc.top+1, rc.right-rc.left-2, 1, GetSysColor( COLOR_3DFACE ) );
				SetPixel( hDC, rc.right-2, rc.top+1, GetSysColor( COLOR_3DHIGHLIGHT ) );
            }
			
            FillSolidRect( hDC, rc.right-1, rc.top+2, 1, rc.bottom-rc.top-4, GetSysColor( COLOR_3DSHADOW ) );
            FillSolidRect( hDC, rc.right-2, rc.top+2, 1, rc.bottom-rc.top-4, GetSysColor( COLOR_3DFACE ) );            
			
            if ( nCurSel != nItem + 1 )
            {
				FillSolidRect( hDC, rc.left, rc.bottom-1, rc.right-rc.left-2, 1, GetSysColor( COLOR_3DSHADOW ) );            
				FillSolidRect( hDC, rc.left, rc.bottom-2, rc.right-rc.left-2, 1, GetSysColor( COLOR_3DFACE ) );
				SetPixel( hDC, rc.right-2, rc.bottom-2, GetSysColor( COLOR_3DSHADOW ) );
            }                        
		}       
		break;
		
	case tabBottom:
		if ( nState & bsChecked )
		{
            rc.bottom += 2;
            rc.left -= 2;
            rc.right += 2;
            rc.top -=1;
		}
		
		if ( nState & bsHover )
		{
            if ( nCurSel != nItem - 1 )
            {
				FillSolidRect( hDC, rc.left, rc.top, 1, rc.bottom-rc.top-2, GetSysColor( COLOR_3DHIGHLIGHT ) );
				FillSolidRect( hDC, rc.left+1, rc.top, 1, rc.bottom-rc.top-2, GetSysColor( COLOR_3DLIGHT ) );
				SetPixel( hDC, rc.left+1, rc.bottom-2, GetSysColor( COLOR_3DHIGHLIGHT ) );
            }
			
            FillSolidRect( hDC, rc.left+2, rc.bottom-1, rc.right-rc.left-4, 1, GetSysColor( COLOR_3DDKSHADOW ) );
            FillSolidRect( hDC, rc.left+2, rc.bottom-2, rc.right-rc.left-4, 1, GetSysColor( COLOR_3DSHADOW ) );
			
            if ( nCurSel != nItem + 1 )
            {
				FillSolidRect( hDC, rc.right-1, rc.top, 1, rc.bottom-rc.top-2, GetSysColor( COLOR_3DDKSHADOW ) );
				FillSolidRect( hDC, rc.right-2, rc.top, 1, rc.bottom-rc.top-2, GetSysColor( COLOR_3DSHADOW ) );                        
				SetPixel( hDC, rc.right-2, rc.bottom-2, GetSysColor( COLOR_3DDKSHADOW ) );
            }
		}
		else
		{
            if ( nCurSel != nItem - 1 )
            {
				FillSolidRect( hDC, rc.left, rc.top, 1, rc.bottom-rc.top-2, GetSysColor( COLOR_3DHIGHLIGHT ) );
				FillSolidRect( hDC, rc.left+1, rc.top, 1, rc.bottom-rc.top-2, GetSysColor( COLOR_3DFACE ) );
				SetPixel( hDC, rc.left+1, rc.bottom-2, GetSysColor( COLOR_3DHIGHLIGHT ) );
            }
			
            FillSolidRect( hDC, rc.left+2, rc.bottom-1, rc.right-rc.left-4, 1, GetSysColor( COLOR_3DSHADOW ) );
            FillSolidRect( hDC, rc.left+2, rc.bottom-2, rc.right-rc.left-4, 1, GetSysColor( COLOR_3DFACE ) );
			
            if ( nCurSel != nItem + 1 )
            {
				FillSolidRect( hDC, rc.right-1, rc.top, 1, rc.bottom-rc.top-2, GetSysColor( COLOR_3DSHADOW ) );
				FillSolidRect( hDC, rc.right-2, rc.top, 1, rc.bottom-rc.top-2, GetSysColor( COLOR_3DFACE ) );
				SetPixel( hDC, rc.right-2, rc.bottom-2, GetSysColor( COLOR_3DSHADOW ) );
            }
		}       
		break;
   }
}

CCoolControlsManager::CCMTabControl::OrientationsEnum CCoolControlsManager::CCMTabControl::GetOrientation() const
{
	DWORD dwStyle = GetWindowLong( m_hWnd, GWL_STYLE );
	if ( dwStyle & TCS_BOTTOM )
	{
		if ( dwStyle & TCS_VERTICAL )
			return tabRight;
		else
			return tabBottom;               
	}
	else  
	{ 
		if ( dwStyle & TCS_VERTICAL )
			return tabLeft;
		else
			return tabTop;
	}
}

void CCoolControlsManager::CCMTabControl::DrawControl( HDC hDC, const RECT& rect )
{
	DWORD dwStyle = GetWindowLong( m_hWnd, GWL_STYLE );
	if ( dwStyle & TCS_BUTTONS ) // Skip button-like tab controls
		return;
	
	hDC = GetDC( m_hWnd );  // We will draw on the client DC
	
	RECT rc = rect;
	SendMessage( m_hWnd, TCM_ADJUSTRECT, FALSE, (LPARAM)&rc );   
	InflateRect( &rc, 4, 4 );
	
	RECT rcSel;
	int nCurSel = SendMessage( m_hWnd, TCM_GETCURSEL, 0, 0L );
	SendMessage( m_hWnd, TCM_GETITEMRECT, nCurSel, (LPARAM)&rcSel );
	
	switch ( GetOrientation() )
	{
	case tabLeft:
		rc.left += 2;
		FillSolidRect( hDC, rc.left, rc.bottom, rc.right-rc.left, -1, GetSysColor( COLOR_3DSHADOW ) );
		FillSolidRect( hDC, rc.right, rc.top, -1, rc.bottom-rc.top, GetSysColor( COLOR_3DSHADOW ) );         
		break;
		
	case tabTop:
		rc.top += 2;                  
		FillSolidRect( hDC, rc.left, rc.bottom, rc.right-rc.left, -1, GetSysColor( COLOR_3DSHADOW ) );
		FillSolidRect( hDC, rc.right, rc.top, -1, rc.bottom-rc.top, GetSysColor( COLOR_3DSHADOW ) );
		break;
		
	case tabRight:
		rc.right -= 2;         
		FillSolidRect( hDC, rc.left, rc.bottom, rc.right-rc.left, -1, GetSysColor( COLOR_3DSHADOW ) );
		FillSolidRect( hDC, rc.right, rc.top, -1, rcSel.top-rc.top, GetSysColor( COLOR_3DSHADOW ) );
		FillSolidRect( hDC, rc.right, rcSel.bottom, -1, rc.bottom-rcSel.bottom, GetSysColor( COLOR_3DSHADOW ) );
		break;
		
	case tabBottom:
		rc.bottom -= 2;         
		FillSolidRect( hDC, rc.left, rc.bottom, rcSel.left-rc.left, -1, GetSysColor( COLOR_3DSHADOW ) );
		FillSolidRect( hDC, rcSel.right, rc.bottom, rc.right-rcSel.right, -1, GetSysColor( COLOR_3DSHADOW ) );
		FillSolidRect( hDC, rc.right, rc.top, -1, rc.bottom-rc.top, GetSysColor( COLOR_3DSHADOW ) );
		break;
	}
	
	Draw3dRect( hDC, rc.left+1, rc.top+1, rc.right-rc.left-2, rc.bottom-rc.top-2, 
		GetSysColor( COLOR_3DFACE ), GetSysColor( COLOR_3DFACE ) );
	
	m_nOldItem = -1;
	int nState = 0;   
	POINT point;
	GetCursorPos( &point );
	ScreenToClient( m_hWnd, &point );
	int nCount = SendMessage( m_hWnd, TCM_GETITEMCOUNT, 0, 0L );
	
	for ( int i = 0; i < nCount; i++ )
	{

⌨️ 快捷键说明

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