Exemplo n.º 1
0
void CPreView::OnPaint()
{
	CPaintDC dc(this);

	CRect rcClient, rcBar;
	GetClientRect(rcBar);

	CDC mdc;
	mdc.CreateCompatibleDC(&dc);

	CBitmap bm;
	bm.CreateCompatibleBitmap(&dc, rcBar.Width(), rcBar.Height());
	CBitmap* pOldBm = mdc.SelectObject(&bm);
	mdc.SetBkMode(TRANSPARENT);

	int r1, g1, b1, r2, g2, b2, i, k;
	COLORREF bg = GetSysColor(COLOR_BTNFACE);
	COLORREF light = RGB(255,255,255);
	COLORREF shadow = GetSysColor(COLOR_BTNSHADOW);

	AppSettings& s = AfxGetAppSettings();

	if (s.fDisableXPToolbars) {
		ThemeRGB(95, 100, 105, r1, g1, b1);
		ThemeRGB(25, 30, 35, r2, g2, b2);
	} else {
		r1 = r2 = GetRValue(bg);
		g1 = g2 = GetGValue(bg);
		b1 = b2 = GetBValue(bg);
	}
	k = rcBar.Height();
	for(i=0;i<k;i++) {
		mdc.FillSolidRect(0,i,rcBar.Width(),1,RGBFill(r1, g1, b1, r2, g2, b2, i, k));
	}

	if (s.fDisableXPToolbars) {
		ThemeRGB(145, 140, 145, r1, g1, b1);
		ThemeRGB(115, 120, 125, r2, g2, b2);
	} else {
		r1 = r2 = GetRValue(light);
		g1 = g2 = GetGValue(light);
		b1 = b2 = GetBValue(light);
	}
	k = rcBar.Width();
	for(i=0;i<k;i++) {
		mdc.FillSolidRect(i,0,1,1,RGBFill(r1, g1, b1, r2, g2, b2, i, k));
	}

	if (s.fDisableXPToolbars) {
		ThemeRGB(15, 20, 25, r1, g1, b1);
		ThemeRGB(55, 60, 65, r2, g2, b2);
	} else {
		r1 = r2 = GetRValue(shadow);
		g1 = g2 = GetGValue(shadow);
		b1 = b2 = GetBValue(shadow);
	}
	k = rcBar.Width();
	for(i=rcBar.left+wb;i<k-wb;i++) {
		mdc.FillSolidRect(i,hc,1,1,RGBFill(r1, g1, b1, r2, g2, b2, i, k));
	}

	if (s.fDisableXPToolbars) {
		ThemeRGB(35, 40, 45, r1, g1, b1);
		ThemeRGB(55, 60, 65, r2, g2, b2);
	} else {
		r1 = r2 = GetRValue(light);
		g1 = g2 = GetGValue(light);
		b1 = b2 = GetBValue(light);
	}
	k = rcBar.Width();
	for(i=rcBar.left+wb;i<k-wb;i++) {
		mdc.FillSolidRect(i,rcBar.bottom-wb-1,1,1,RGBFill(r1, g1, b1, r2, g2, b2, i, k));
	}

	if (s.fDisableXPToolbars) {
		ThemeRGB(0, 5, 10, r1, g1, b1);
		ThemeRGB(10, 15, 20, r2, g2, b2);
	} else {
		r1 = r2 = GetRValue(shadow);
		g1 = g2 = GetGValue(shadow);
		b1 = b2 = GetBValue(shadow);
	}
	k = rcBar.Width();
	for(i=0;i<k;i++) {
		mdc.FillSolidRect(i,rcBar.bottom-1,1,1,RGBFill(r1, g1, b1, r2, g2, b2, i, k));
	}

	if (s.fDisableXPToolbars) {
		ThemeRGB(145, 150, 155, r1, g1, b1);
		ThemeRGB(45, 50, 55, r2, g2, b2);
	} else {
		r1 = r2 = GetRValue(light);
		g1 = g2 = GetGValue(light);
		b1 = b2 = GetBValue(light);
	}
	k = rcBar.Height();
	for(i=0;i<k-1;i++) {
		mdc.FillSolidRect(0,i,1,1,RGBFill(r1, g1, b1, r2, g2, b2, i, k));
	}

	if (s.fDisableXPToolbars) {
		ThemeRGB(55, 60, 65, r1, g1, b1);
		ThemeRGB(15, 20, 25, r2, g2, b2);
	} else {
		r1 = r2 = GetRValue(shadow);
		g1 = g2 = GetGValue(shadow);
		b1 = b2 = GetBValue(shadow);
	}
	k = rcBar.Height();
	for(i=hc;i<k-wb;i++) {
		mdc.FillSolidRect(wb,i,1,1,RGBFill(r1, g1, b1, r2, g2, b2, i, k));
	}

	if (s.fDisableXPToolbars) {
		ThemeRGB(105, 110, 115, r1, g1, b1);
		ThemeRGB(55, 60, 65, r2, g2, b2);
	} else {
		r1 = r2 = GetRValue(light);
		g1 = g2 = GetGValue(light);
		b1 = b2 = GetBValue(light);
	}
	k = rcBar.Height();
	for(i=hc;i<k-wb;i++) {
		mdc.FillSolidRect(rcBar.right-wb-1,i,1,1,RGBFill(r1, g1, b1, r2, g2, b2, i, k));
	}

	if (s.fDisableXPToolbars) {
		ThemeRGB(65, 70, 75, r1, g1, b1);
		ThemeRGB(5, 10, 15, r2, g2, b2);
	} else {
		r1 = r2 = GetRValue(shadow);
		g1 = g2 = GetGValue(shadow);
		b1 = b2 = GetBValue(shadow);
	}
	k = rcBar.Height();
	for(i=0;i<k;i++) {
		mdc.FillSolidRect(rcBar.right-1,i,1,1,RGBFill(r1, g1, b1, r2, g2, b2, i, k));
	}

	// text (time)
	CFont font;

	if (s.fDisableXPToolbars) {
		ThemeRGB(255, 255, 255, r1, g1, b1);
	} else {
		r1 = GetRValue(0);
		g1 = GetGValue(0);
		b1 = GetBValue(0);
	}

	mdc.SetTextColor(RGB(r1,g1,b1));
	
	font.CreateFont(13, 0, 0, 0, FW_SEMIBOLD, 0, 0, 0, DEFAULT_CHARSET,
									OUT_RASTER_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, VARIABLE_PITCH | FF_MODERN,
									_T("Tahoma"));

	mdc.SelectObject(&font);
	CRect rtime = rcBar;
	rtime.top = 0;
	rtime.bottom = hc;
	mdc.DrawText(tooltipstr, tooltipstr.GetLength(), &rtime, DT_CENTER|DT_VCENTER|DT_SINGLELINE);

	dc.ExcludeClipRect(v_rect);
	dc.BitBlt(0, 0, rcBar.Width(), rcBar.Height(), &mdc, 0, 0, SRCCOPY);

	mdc.SelectObject(pOldBm);
	bm.DeleteObject();
	mdc.DeleteDC();
}
Exemplo n.º 2
0
void CPlayerToolBar::OnCustomDraw(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMTBCUSTOMDRAW pTBCD	= reinterpret_cast<LPNMTBCUSTOMDRAW>(pNMHDR);
	LRESULT lr				= CDRF_DODEFAULT;

	AppSettings& s		= AfxGetAppSettings();
	CMainFrame* pFrame	= (CMainFrame*)GetParentFrame();
	bool bGPU			= (pFrame->GetMediaState() != -1) && (GetDXVAStatus() != 0);

	int R, G, B, R2, G2, B2;

	GRADIENT_RECT gr[1] = {{0, 1}};

	int sep[] = {2, 7, 10, 11};

	if (s.fDisableXPToolbars) {

		switch(pTBCD->nmcd.dwDrawStage)
		{
		case CDDS_PREERASE:
			m_volctrl.Invalidate();
			lr = CDRF_SKIPDEFAULT;
			break;
		case CDDS_PREPAINT: {
				CDC dc;
				dc.Attach(pTBCD->nmcd.hdc);
				CRect r;

				GetClientRect(&r);

				if (m_BackGroundbm.IsExtGradiendLoading()) {
					ThemeRGB(s.nThemeRed, s.nThemeGreen, s.nThemeBlue, R, G, B);
					m_BackGroundbm.PaintExternalGradient(&dc, r, 21, s.nThemeBrightness, R, G, B);
				} else {
					ThemeRGB(50, 55, 60, R, G, B);
					ThemeRGB(20, 25, 30, R2, G2, B2);
					TRIVERTEX tv[2] = {
						{r.left, r.top, R*256, G*256, B*256, 255*256},
						{r.right, r.bottom, R2*256, G2*256, B2*256, 255*256},
					};
					dc.GradientFill(tv, 2, gr, 1, GRADIENT_FILL_RECT_V);
				}

				dc.Detach();
			}
			lr |= CDRF_NOTIFYITEMDRAW;
			break;
		case CDDS_ITEMPREPAINT:
			lr = CDRF_DODEFAULT;

			lr |= TBCDRF_NOETCHEDEFFECT;
			lr |= TBCDRF_NOBACKGROUND;
			lr |= TBCDRF_NOEDGES;
			lr |= TBCDRF_NOOFFSET;

			lr |= CDRF_NOTIFYPOSTPAINT;
			lr |= CDRF_NOTIFYITEMDRAW;
			break;
		case CDDS_ITEMPOSTPAINT:
			lr = CDRF_DODEFAULT;

			CDC dc;
			dc.Attach(pTBCD->nmcd.hdc);
			CRect r;
			CopyRect(&r,&pTBCD->nmcd.rc);

			CRect rGlassLike(0,0,8,8);
			int nW = rGlassLike.Width(), nH = rGlassLike.Height();
			CDC memdc;
			memdc.CreateCompatibleDC(&dc);
			CBitmap *bmOld, bmGlassLike;
			bmGlassLike.CreateCompatibleBitmap(&dc, nW, nH);
			bmOld = memdc.SelectObject(&bmGlassLike);

			TRIVERTEX tv[2] = {
				{0, 0, 255*256, 255*256, 255*256, 255*256},
				{nW, nH, 0, 0, 0, 0},
			};
			memdc.GradientFill(tv, 2, gr, 1, GRADIENT_FILL_RECT_V);

			BLENDFUNCTION bf;
			bf.AlphaFormat			= AC_SRC_ALPHA;
			bf.BlendFlags			= 0;
			bf.BlendOp				= AC_SRC_OVER;
			bf.SourceConstantAlpha	= 90;

			CPen penFrHot(PS_SOLID,0,0x00e9e9e9);//clr_resFace
			CPen *penSaved		= dc.SelectObject(&penFrHot);
			CBrush *brushSaved	= (CBrush*)dc.SelectStockObject(NULL_BRUSH);

			//CDIS_SELECTED,CDIS_GRAYED,CDIS_DISABLED,CDIS_CHECKED,CDIS_FOCUS,CDIS_DEFAULT,CDIS_HOT,CDIS_MARKED,CDIS_INDETERMINATE

			if (CDIS_HOT == pTBCD->nmcd.uItemState || CDIS_CHECKED + CDIS_HOT == pTBCD->nmcd.uItemState) {
				dc.SelectObject(&penFrHot);
				dc.RoundRect(r.left + 1, r.top + 1, r.right - 2, r.bottom - 1, 6, 4);
				AlphaBlend(dc.m_hDC, r.left + 2, r.top + 2, r.Width() - 4, 0.7 * r.Height() - 2, memdc, 0, 0, nW, nH, bf);
			}
			/*
			if (CDIS_CHECKED == pTBCD->nmcd.uItemState) {
				CPen penFrChecked(PS_SOLID,0,0x00808080);//clr_resDark
				dc.SelectObject(&penFrChecked);
				dc.RoundRect(r.left + 1, r.top + 1, r.right - 2, r.bottom - 1, 6, 4);
			}
			*/
			for (int j = 0; j < _countof(sep); j++) {
				GetItemRect(sep[j], &r);

				if (m_BackGroundbm.IsExtGradiendLoading()) {
					ThemeRGB(s.nThemeRed, s.nThemeGreen, s.nThemeBlue, R, G, B);
					m_BackGroundbm.PaintExternalGradient(&dc, r, 21, s.nThemeBrightness, R, G, B);
				} else {
					ThemeRGB(50, 55, 60, R, G, B);
					ThemeRGB(20, 25, 30, R2, G2, B2);
					TRIVERTEX tv[2] = {
						{r.left, r.top, R*256, G*256, B*256, 255*256},
						{r.right, r.bottom, R2*256, G2*256, B2*256, 255*256},
					};
					dc.GradientFill(tv, 2, gr, 1, GRADIENT_FILL_RECT_V);
				}
			}
			CRect r10; //SUB
			GetItemRect(10, &r10);

			CRect r12; //MUTE
			GetItemRect(12, &r12);

			if (bGPU && m_hDXVAIcon) {
				if (r10.right < r12.left - iDXVAIconWidth) DrawIconEx(dc.m_hDC, r12.left - 8 - iDXVAIconWidth, r.CenterPoint().y - (iDXVAIconHeight/2+1), m_hDXVAIcon, 0, 0, 0, NULL, DI_NORMAL);
			}

			dc.SelectObject(&penSaved);
			dc.SelectObject(&brushSaved);
			dc.Detach();
			DeleteObject(memdc.SelectObject(bmOld));
			memdc.DeleteDC();
			lr |= CDRF_SKIPDEFAULT;
			break;
		}
	} else {
		switch(pTBCD->nmcd.dwDrawStage)
		{
		case CDDS_PREERASE:
			m_volctrl.Invalidate();
			lr = CDRF_SKIPDEFAULT;
			break;
		case CDDS_PREPAINT: {
				CDC dc;
				dc.Attach(pTBCD->nmcd.hdc);
				CRect r;
				GetClientRect(&r);
				dc.FillSolidRect(r, GetSysColor(COLOR_BTNFACE));
				dc.Detach();
			}
			lr |= CDRF_NOTIFYITEMDRAW;
			break;
		case CDDS_ITEMPREPAINT:
			lr = CDRF_DODEFAULT;

			lr |= CDRF_NOTIFYPOSTPAINT;
			lr |= CDRF_NOTIFYITEMDRAW;
			break;
		case CDDS_ITEMPOSTPAINT:
			lr = CDRF_DODEFAULT;

			CDC dc;
			dc.Attach(pTBCD->nmcd.hdc);
			CRect r;

			for (int j = 0; j < _countof(sep); j++) {
				GetItemRect(sep[j], &r);

				dc.FillSolidRect(r, GetSysColor(COLOR_BTNFACE));
			}

			dc.Detach();
			lr |= CDRF_SKIPDEFAULT;
			break;
		}
	}

	*pResult = lr;
}