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

📄 coolb.cpp

📁 VC++写的视频播放器源码,主要包含源程序和图片
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// CoolB.cpp : implementation file
//

#include "stdafx.h"
#include "CoolB.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

static const int nImageHorzMargin = 10;
static const int nVertMargin = 5;
static const COLORREF clrDefault = (COLORREF) -1;

/////////////////////////////////////////////////////////////////////////////
// CCoolButton

IMPLEMENT_DYNAMIC(CCoolButton, CButton)

CCoolButton::CCoolButton()
{
	m_bPushed = FALSE;
	m_bHighlighted = FALSE;
	m_bCaptured = FALSE;
	m_nFlatStyle = BUTTONSTYLE_FLAT;
	m_nDisplayStyle = BUTTONSTYLE_BOTH;
	m_sizeImage = CSize (0, 0);
	m_bAutoDestroyImage = FALSE;
	m_hIcon = NULL;
	m_hBitmap = NULL;
	m_hIconHot = NULL;
	m_hBitmapHot = NULL;
	m_hBitmapDisabled = NULL;
	m_bRighImage = FALSE;
	m_sizePushOffset = CSize (2, 2);
	m_bHover = FALSE;
	m_clrRegular = clrDefault;
	m_clrHover = clrDefault;
}
//****************************************************************************
CCoolButton::~CCoolButton()
{
	CleanUp ();
}
//****************************************************************************
void CCoolButton::CleanUp ()
{
	if (m_bAutoDestroyImage)
	{
		if (m_hBitmap != NULL)
		{
			::DeleteObject (m_hBitmap);
		}

		if (m_hIcon != NULL)
		{
			::DestroyIcon (m_hIcon);
		}

		if (m_hBitmapHot != NULL)
		{
			::DeleteObject (m_hBitmapHot);
		}

		if (m_hIconHot != NULL)
		{
			::DestroyIcon (m_hIconHot);
		}
	}

	if (m_hBitmapDisabled != NULL)
	{
		::DeleteObject (m_hBitmapDisabled);
		m_hBitmapDisabled = NULL;
	}

	m_hBitmap = NULL;
	m_hIcon = NULL;
	m_hIconHot = NULL;
	m_hBitmapHot = NULL;
	m_bAutoDestroyImage = FALSE;

	m_sizeImage = CSize (0, 0);
}


BEGIN_MESSAGE_MAP(CCoolButton, CButton)
	//{{AFX_MSG_MAP(CCoolButton)
	ON_WM_ERASEBKGND()
	ON_WM_CANCELMODE()
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_ENABLE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCoolButton message handlers

void CCoolButton::DrawItem(LPDRAWITEMSTRUCT lpDIS) 
{
	ASSERT (lpDIS != NULL);
	ASSERT (lpDIS->CtlType == ODT_BUTTON);

	CDC* pDC = CDC::FromHandle (lpDIS->hDC);
	ASSERT_VALID (pDC);

	CRect rectClient = lpDIS->rcItem;

	//--------------
	// Fill coltrol:
	//--------------
	COLORREF clrBtnFace = ::GetSysColor(COLOR_BTNFACE);
	CBrush brBtnFace;
	brBtnFace.CreateSolidBrush (clrBtnFace);

	pDC->FillRect (rectClient, &brBtnFace);

	if (lpDIS->itemState & ODS_FOCUS)
	{
		OnDrawFocusRect (pDC, rectClient);
	}

	//----------------
	// Draw 3d border:
	//----------------
	COLORREF clrBtnShadow,clrBtnHilite,clrBtnDkShadow,clrBtnLight;
	clrBtnShadow = ::GetSysColor(COLOR_BTNSHADOW);
	clrBtnDkShadow = ::GetSysColor(COLOR_3DDKSHADOW);
	clrBtnLight = ::GetSysColor(COLOR_3DLIGHT);
	clrBtnHilite = ::GetSysColor(COLOR_BTNHIGHLIGHT);

	if (m_nFlatStyle != BUTTONSTYLE_NOBORDERS)
	{
		if (m_bPushed && m_bHighlighted || (lpDIS->itemState & ODS_SELECTED))
		{
			pDC->Draw3dRect (rectClient,clrBtnDkShadow,clrBtnHilite);

			rectClient.DeflateRect (1, 1);

			if (m_nFlatStyle != BUTTONSTYLE_FLAT)
			{
				pDC->Draw3dRect (rectClient,clrBtnShadow,clrBtnLight);
			}

			rectClient.DeflateRect (1, 1);

			rectClient.left += m_sizePushOffset.cx;
			rectClient.top += m_sizePushOffset.cy;
		}
		else if (m_nFlatStyle != BUTTONSTYLE_FLAT || m_bHighlighted)
		{
			pDC->Draw3dRect (rectClient,clrBtnHilite,clrBtnDkShadow);
			rectClient.DeflateRect (1, 1);

			if (m_nFlatStyle == BUTTONSTYLE_3D ||
				(m_nFlatStyle == BUTTONSTYLE_SEMIFLAT && m_bHighlighted))
			{
				pDC->Draw3dRect (rectClient,clrBtnLight,clrBtnShadow);
			}

			rectClient.DeflateRect (1, 1);
		}
		else
		{
			rectClient.DeflateRect (2, 2);
		}
	}
	else
	{
		rectClient.DeflateRect (2, 2);
	}

	//---------------------
	// Draw button content:
	//---------------------
	OnDraw (pDC, rectClient, lpDIS->itemState);
}
//****************************************************************************
void CCoolButton::PreSubclassWindow() 
{
	ModifyStyle (BS_DEFPUSHBUTTON, BS_OWNERDRAW);
	CButton::PreSubclassWindow();
}
//****************************************************************************
BOOL CCoolButton::PreCreateWindow(CREATESTRUCT& cs) 
{
	cs.style |= BS_OWNERDRAW;
	cs.style &= ~BS_DEFPUSHBUTTON;

	return CButton::PreCreateWindow(cs);
}
//****************************************************************************
BOOL CCoolButton::OnEraseBkgnd(CDC* /*pDC*/) 
{
	return TRUE;
}
//****************************************************************************
void CCoolButton::OnDraw (CDC* pDC, const CRect& rect, UINT uiState)
{
	COLORREF clrBtnText = ::GetSysColor(COLOR_BTNTEXT);
	COLORREF clrBtnHilite = ::GetSysColor(COLOR_BTNHIGHLIGHT);
	COLORREF clrGrayedText = ::GetSysColor (COLOR_GRAYTEXT);

	CRect rectText = rect;
	CRect rectImage = rect;

	CString strText;
	GetWindowText (strText);

	if (m_sizeImage.cx != 0 && m_nDisplayStyle != BUTTONSTYLE_TEXT)
	{
		if (!strText.IsEmpty () && m_nDisplayStyle != BUTTONSTYLE_IMAGE)
		{
			if (m_bRighImage)
			{
				rectText.right -= m_sizeImage.cx + nImageHorzMargin / 2;
				rectImage.left = rectText.right;
				rectImage.right -= nImageHorzMargin / 2;
			}
			else
			{
				rectText.left +=  m_sizeImage.cx + nImageHorzMargin / 2;
				rectImage.left += nImageHorzMargin / 2;
				rectImage.right = rectText.left;
			}
		}

		// Center image:
		rectImage.DeflateRect ((rectImage.Width () - m_sizeImage.cx) / 2,
			max (0, (rect.Height () - m_sizeImage.cy) / 2));
	}
	else
	{
		rectImage.SetRectEmpty ();
	}

	//-----------
	// Draw text:
	//-----------
	pDC->SetBkMode (TRANSPARENT);

	if(m_nDisplayStyle != BUTTONSTYLE_IMAGE)
	{
		COLORREF clrText = m_clrRegular == clrDefault ? 
			clrBtnText : m_clrRegular;
	
		if (m_bHighlighted && m_clrHover != clrDefault)
		{
			clrText = m_clrHover;
		}

		UINT uiDTFlags = DT_VCENTER | DT_SINGLELINE | DT_CENTER;

		if (uiState & ODS_DISABLED)
		{
			pDC->SetTextColor (clrBtnHilite);

			CRect rectShft = rectText;
			rectShft.OffsetRect (1, 1);
			pDC->DrawText (strText, rectShft, uiDTFlags);

			clrText = clrGrayedText;
		}

		pDC->SetTextColor (clrText);
		pDC->DrawText (strText, rectText, uiDTFlags);
	}

	//------------
	// Draw image:
	//------------
	if (!rectImage.IsRectEmpty () && m_nDisplayStyle != BUTTONSTYLE_TEXT)
	{
		UINT uiFlags = (uiState & ODS_DISABLED) == 0 ? 
			DSS_NORMAL : DSS_DISABLED;

		if (m_hIcon != NULL)
		{
			ASSERT (m_hBitmap == NULL);

			HBRUSH hbr = NULL;
			pDC->DrawState (rectImage.TopLeft (), m_sizeImage, 
				m_bHighlighted && m_hIconHot != NULL ? m_hIconHot : m_hIcon,
				uiFlags, hbr);
		}
		else
		{
			HBITMAP hbmp = m_hBitmap;
			if (uiState & ODS_DISABLED)
			{
				hbmp = m_hBitmapDisabled;
			}
			else if (m_bHighlighted && m_hBitmapHot != NULL)
			{
				hbmp = m_hBitmapHot;
			}

			ASSERT (hbmp != NULL);
			pDC->DrawState (rectImage.TopLeft (), m_sizeImage, hbmp, uiFlags);
		}
	}
}
//****************************************************************************
void CCoolButton::SetImage (HICON hIcon, BOOL bAutoDestroy, HICON hIconHot)
{
	CleanUp ();

	if (hIcon == NULL)
	{
		return;
	}

	m_hIcon = hIcon;
	m_hIconHot = hIconHot;
	m_bAutoDestroyImage = bAutoDestroy;

	ICONINFO info;
	::GetIconInfo (m_hIcon, &info);

	BITMAP bmp;
	::GetObject (info.hbmColor, sizeof (BITMAP), (LPVOID) &bmp);

	m_sizeImage.cx = bmp.bmWidth;
	m_sizeImage.cy = bmp.bmHeight;

	::DeleteObject (info.hbmColor);
	::DeleteObject (info.hbmMask);
}
//****************************************************************************
void CCoolButton::SetImage (HBITMAP hBitmap, BOOL bAutoDestroy, HBITMAP hBitmapHot)
{
	CleanUp ();

	if (hBitmap == NULL)
	{
		return;
	}

	m_hBitmap = hBitmap;
	m_hBitmapHot = hBitmapHot;
	m_bAutoDestroyImage = bAutoDestroy;

	BITMAP bmp;
	::GetObject (m_hBitmap, sizeof (BITMAP), (LPVOID) &bmp);

	m_sizeImage.cx = bmp.bmWidth;
	m_sizeImage.cy = bmp.bmHeight;

	CreateDisabledImage ();
}
//****************************************************************************
void CCoolButton::SetImage (UINT uiBmpResId, UINT uiBmpHotResId)
{
	CleanUp ();

	if (uiBmpResId == 0)
	{
		return;
	}

	HBITMAP hbmp = (HBITMAP) ::LoadImage (

⌨️ 快捷键说明

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