当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 如何对 BCGControlBarPro 进行换肤
| 如何对 BCGControlBarPro 进行换肤
效果图
本人使用Skin++库(www.uipower.com),在BCG的例子中作了几处改动后,BCG就拥有了动态换肤的功能。 #include "SkinPlusPlus.h"2、Skin库的加载: BOOL CBCGCBDotNetExampleApp::InitInstance(){ ...... InitializeSkin(_T("XPCorona.ssk")); ......}3、让BCG重新取下系统色:int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){ .................. ----------------- // Create menu bar: //----------------- if (!m_wndMenuBar.Create (this)) { TRACE0("Failed to create menubar\n"); return -1; // fail to create } m_wndMenuBar.SendMessage(WM_SYSCOLORCHANGE,0,0); ..................}4、工具条图标的透明色问题;从CBCGPToolBar派生一个子类CMyBCGPToolBar,在该子类中覆盖CBCGPToolBar的 virtual void DoPaint(CDC* pDCPaint)。这里主要处理工具条图标的透明色问题。 凡是使用CBCGPToolBar的地方全部替换成CMyBCGPToolBar。这样你的工具条就有了和皮肤一致的皮肤色。而不是Windows的系统色。代码如下: #ifndef _MYTOOLBAR_H_#define _MYTOOLBAR_H_#include "stdafx.h"class CMyBCGPToolBar : public CBCGPToolBar{public: virtual void DoPaint(CDC* pDCPaint) { ASSERT_VALID(this); ASSERT_VALID(pDCPaint); CRect rectClip; pDCPaint->GetClipBox (rectClip); BOOL bHorz = GetCurrentAlignment () & CBRS_ORIENT_HORZ ? TRUE : FALSE; CRect rectClient; GetClientRect (rectClient); CDC* pDC = pDCPaint; BOOL m_bMemDC = FALSE; CDC dcMem; CBitmap bmp; CBitmap* pOldBmp = NULL; if (dcMem.CreateCompatibleDC (pDCPaint) && bmp.CreateCompatibleBitmap (pDCPaint, rectClient.Width (), rectClient.Height ())) { m_bMemDC = TRUE; pOldBmp = dcMem.SelectObject (&bmp); pDC = &dcMem; if ((GetStyle () & TBSTYLE_TRANSPARENT) == 0) { CBCGPVisualManager::GetInstance ()->OnFillBarBackground (pDC, this, rectClient, rectClip); } } OnFillBackground (pDC); pDC->SetTextColor (globalData.clrBtnText); pDC->SetBkMode (TRANSPARENT); CRect rect; GetClientRect(rect); if (bHorz) { rect.bottom = rect.top + GetRowHeight (); } else { rect.right = rect.left + GetColumnWidth (); } CBCGPToolBarImages* pImages = GetImageList (m_Images, m_ImagesLocked, m_LargeImages, m_LargeImagesLocked); CBCGPToolBarImages* pHotImages = pImages; CBCGPToolBarImages* pColdImages = GetImageList(m_ColdImages, m_ColdImagesLocked, m_La |