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