CPlayerToolBar::CPlayerToolBar() : fDisableImgListRemap(false) , m_pButtonsImages(NULL) , m_hDXVAIcon(NULL) { HBITMAP hBmp = CMPCPngImage::LoadExternalImage(L"gpu", IDB_DXVA_ON, IMG_TYPE::UNDEF); BITMAP bm = { 0 }; ::GetObject(hBmp, sizeof(bm), &bm); if (CMPCPngImage::FileExists(CString(L"gpu")) && (bm.bmHeight > 32 || bm.bmWidth > 32)) { hBmp = CMPCPngImage::LoadExternalImage(L"", IDB_DXVA_ON, IMG_TYPE::UNDEF); ::GetObject(hBmp, sizeof(bm), &bm); } if (bm.bmWidth <= 32 && bm.bmHeight <= 32) { CBitmap *bmp = DNew CBitmap(); bmp->Attach(hBmp); CImageList *pButtonDXVA = DNew CImageList(); pButtonDXVA->Create(bm.bmWidth, bm.bmHeight, ILC_COLOR32 | ILC_MASK, 1, 0); pButtonDXVA->Add(bmp, static_cast<CBitmap*>(NULL)); m_hDXVAIcon = pButtonDXVA->ExtractIcon(0); delete pButtonDXVA; delete bmp; } iDXVAIconHeight = bm.bmHeight; iDXVAIconWidth = bm.bmWidth; DeleteObject(hBmp); }
BOOL CPlayerToolBar::Create(CWnd* pParentWnd) { VERIFY(__super::CreateEx(pParentWnd, TBSTYLE_FLAT | TBSTYLE_TRANSPARENT | TBSTYLE_AUTOSIZE | TBSTYLE_CUSTOMERASE, WS_CHILD | WS_VISIBLE | CBRS_BOTTOM | CBRS_TOOLTIPS, CRect(2, 2, 0, 1))); VERIFY(LoadToolBar(IDB_PLAYERTOOLBAR)); // Should never be RTLed ModifyStyleEx(WS_EX_LAYOUTRTL, WS_EX_NOINHERITLAYOUT); CToolBarCtrl& tb = GetToolBarCtrl(); tb.DeleteButton(tb.GetButtonCount() - 1); tb.DeleteButton(tb.GetButtonCount() - 1); SetMute(AfxGetAppSettings().fMute); UINT styles[] = { TBBS_CHECKGROUP, TBBS_CHECKGROUP, TBBS_CHECKGROUP, TBBS_SEPARATOR, TBBS_BUTTON, TBBS_BUTTON, TBBS_BUTTON, TBBS_BUTTON, TBBS_SEPARATOR, TBBS_BUTTON, TBBS_SEPARATOR, TBBS_SEPARATOR, TBBS_CHECKBOX, }; for (int i = 0; i < _countof(styles); ++i) { // This fixes missing separator in Win 7 if (styles[i] & TBBS_SEPARATOR) { SetButtonInfo(i, GetItemID(i), styles[i], -1); } else { SetButtonStyle(i, styles[i] | TBBS_DISABLED); } } m_volctrl.Create(this); m_volctrl.SetRange(0, 100); m_nButtonHeight = 16; // reset m_nButtonHeight CImage image; if (LoadExternalToolBar(&image)) { CBitmap* bmp = CBitmap::FromHandle(image); int width = image.GetWidth(); int height = image.GetHeight(); int bpp = image.GetBPP(); if (width == height * 15) { // the manual specifies that sizeButton should be sizeImage inflated by (7, 6) SetSizes(CSize(height + 7, height + 6), CSize(height, height)); m_pButtonsImages = DEBUG_NEW CImageList(); if (bpp == 32) { m_pButtonsImages->Create(height, height, ILC_COLOR32 | ILC_MASK, 1, 0); m_pButtonsImages->Add(bmp, nullptr); // alpha is the mask } else { m_pButtonsImages->Create(height, height, ILC_COLOR24 | ILC_MASK, 1, 0); m_pButtonsImages->Add(bmp, RGB(255, 0, 255)); } m_nButtonHeight = height; GetToolBarCtrl().SetImageList(m_pButtonsImages); } image.Destroy(); } return TRUE; }
void CPlayerToolBar::SwitchTheme() { AppSettings& s = AfxGetAppSettings(); CToolBarCtrl& tb = GetToolBarCtrl(); m_nButtonHeight = 16; if (iDisableXPToolbars != (__int64)s.fDisableXPToolbars) { VERIFY(LoadToolBar(IDB_PLAYERTOOLBAR)); ModifyStyleEx(WS_EX_LAYOUTRTL, WS_EX_NOINHERITLAYOUT); tb.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS); tb.DeleteButton(1); tb.DeleteButton(tb.GetButtonCount()-2); SetMute(s.fMute); UINT styles[] = { TBBS_CHECKGROUP, TBBS_CHECKGROUP, TBBS_SEPARATOR, TBBS_BUTTON, TBBS_BUTTON, TBBS_BUTTON, TBBS_BUTTON, TBBS_SEPARATOR, TBBS_BUTTON, TBBS_BUTTON, TBBS_SEPARATOR, TBBS_SEPARATOR, TBBS_CHECKBOX, }; for (int i = 0; i < _countof(styles); i++) { SetButtonStyle(i, styles[i] | TBBS_DISABLED); } iDisableXPToolbars = s.fDisableXPToolbars; } if (s.fDisableXPToolbars) { if (HMODULE h = LoadLibrary(_T("uxtheme.dll"))) { SetWindowThemeFunct f = (SetWindowThemeFunct)GetProcAddress(h, "SetWindowTheme"); if (f) { f(m_hWnd, L" ", L" "); } FreeLibrary(h); } SwitchRemmapedImgList(IDB_PLAYERTOOLBAR, 0);// 0 Remap Active COLORSCHEME cs; cs.dwSize = sizeof(COLORSCHEME); cs.clrBtnHighlight = 0x0046413c; cs.clrBtnShadow = 0x0037322d; tb.SetColorScheme(&cs); tb.SetIndent(5); } else { if (HMODULE h = LoadLibrary(_T("uxtheme.dll"))) { SetWindowThemeFunct f = (SetWindowThemeFunct)GetProcAddress(h, "SetWindowTheme"); if (f) { f(m_hWnd, L"Explorer", NULL); } FreeLibrary(h); } SwitchRemmapedImgList(IDB_PLAYERTOOLBAR, 2);// 2 Undo Active COLORSCHEME cs; cs.dwSize = sizeof(COLORSCHEME); cs.clrBtnHighlight = GetSysColor(COLOR_BTNFACE); cs.clrBtnShadow = GetSysColor(COLOR_BTNSHADOW); tb.SetColorScheme(&cs); tb.SetIndent(0); } HBITMAP hBmp = NULL; bool fp = CMPCPngImage::FileExists(CString(L"toolbar")); if (s.fDisableXPToolbars && !fp) { /* int col = s.clrFaceABGR; int r, g, b, R, G, B; r = col & 0xFF; g = (col >> 8) & 0xFF; b = col >> 16; */ hBmp = CMPCPngImage::LoadExternalImage(L"toolbar", IDB_PLAYERTOOLBAR_PNG, IMG_TYPE::PNG, s.nThemeBrightness, s.nThemeRed, s.nThemeGreen, s.nThemeBlue); } else if (fp) { hBmp = CMPCPngImage::LoadExternalImage(L"toolbar", 0, IMG_TYPE::UNDEF); } BITMAP bitmapBmp; if (NULL != hBmp) { ::GetObject(hBmp, sizeof(bitmapBmp), &bitmapBmp); if (fp && bitmapBmp.bmWidth != bitmapBmp.bmHeight * 15) { if (s.fDisableXPToolbars) { hBmp = CMPCPngImage::LoadExternalImage(L"", IDB_PLAYERTOOLBAR_PNG, IMG_TYPE::PNG, s.nThemeBrightness, s.nThemeRed, s.nThemeGreen, s.nThemeBlue); ::GetObject(hBmp, sizeof(bitmapBmp), &bitmapBmp); } else { DeleteObject(hBmp); hBmp = NULL; } } } if (NULL != hBmp) { CBitmap *bmp = DNew CBitmap(); bmp->Attach(hBmp); SetSizes(CSize(bitmapBmp.bmHeight + 7, bitmapBmp.bmHeight + 6), CSize(bitmapBmp.bmHeight, bitmapBmp.bmHeight)); SAFE_DELETE(m_pButtonsImages); m_pButtonsImages = DNew CImageList(); if (32 == bitmapBmp.bmBitsPixel) { m_pButtonsImages->Create(bitmapBmp.bmHeight, bitmapBmp.bmHeight, ILC_COLOR32 | ILC_MASK, 1, 0); m_pButtonsImages->Add(bmp, static_cast<CBitmap*>(0)); } else { m_pButtonsImages->Create(bitmapBmp.bmHeight, bitmapBmp.bmHeight, ILC_COLOR24 | ILC_MASK, 1, 0); m_pButtonsImages->Add(bmp, RGB(255, 0, 255)); } m_nButtonHeight = bitmapBmp.bmHeight; tb.SetImageList(m_pButtonsImages); fDisableImgListRemap = true; delete bmp; DeleteObject(hBmp); } if (s.fDisableXPToolbars) { if (!fDisableImgListRemap) { SwitchRemmapedImgList(IDB_PLAYERTOOLBAR, 0);// 0 Remap Active SwitchRemmapedImgList(IDB_PLAYERTOOLBAR, 1);// 1 Remap Disabled } } else { fDisableImgListRemap = true; if (NULL == fp) { SwitchRemmapedImgList(IDB_PLAYERTOOLBAR, 2);// 2 Undo Active if (!fDisableImgListRemap) { SwitchRemmapedImgList(IDB_PLAYERTOOLBAR, 3);// 3 Undo Disabled } } } if (::IsWindow(m_volctrl.GetSafeHwnd())) { m_volctrl.Invalidate(); } CMainFrame* pFrame = (CMainFrame*)GetParentFrame(); OAFilterState fs = pFrame->GetMediaState(); TBBUTTONINFO bi; bi.cbSize = sizeof(bi); bi.dwMask = TBIF_IMAGE; if (fs == State_Running) { bi.iImage = 1; } else { bi.iImage = 0; } tb.SetButtonInfo(ID_PLAY_PLAY, &bi); }