如何对 BCGControlBarPro 进行换肤

小手冰凉飞飞

小手冰凉飞飞

2016-01-29 11:57

如何对 BCGControlBarPro 进行换肤,如何对 BCGControlBarPro 进行换肤

如何对 BCGControlBarPro 进行换肤

作者:阙海忠

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/) 下载 BCGPro6.4:(该版本是 BCGControlBar Professional v6.40 Retail 专业零售版,官方发布日期是2003-04-28) 下载可执行文件:(Release, Skin++ Dll, BCG Dll) 下载源代码

效果图



图一

  我们知道使用VC开发大型的应用系统时,都会碰到一个界面设计和风格布局的问题。如果一切都重头开始设计和编写的话,将会是巨大的工作量。在短时间内很难写出一个比较健壮功能强大的界面系统出来。对软件项目进度也带来了不可预测的风险。在这种形势下BCG库就应运而生了。目前BCG可以做出诸如Visual Studio .Net 2003 ,Outlook等大型界面系统。几乎可以满足目前市场上绝大多数管理信息系统的界面要求。在我所看到的很多ERP,GSP等的MIS软件公司,都在采用BCG系统。该库非常稳定和易用。
  随着 Mircorsoft WindowsXP 系统的推出,计算机世界已经进入个性化时代。用户对界面系统提出更高一层的要求。尽管BCG本身自带了Skin工程,但那个工程的功能还是非常弱的。主要表现在: 不能对标题栏,滚动条和 Windows 系统标准的窗口换肤; 没有丰富的界面元素提供下载。

  本人使用Skin++库(www.uipower.com),在BCG的例子中作了几处改动后,BCG就拥有了动态换肤的功能。
  我们在这里以BCGCBDotNetExample为例:

1、Skin头文件的包含在StdAfx.h中包含Skin库的头文件。

#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 menubarn");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      
展开更多 50%)
分享

猜你喜欢

如何对 BCGControlBarPro 进行换肤

C语言教程 C语言函数
如何对 BCGControlBarPro 进行换肤

2345智能浏览器如何进行换肤

浏览器
2345智能浏览器如何进行换肤

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

如何对宝宝进行锻炼

婴儿 幼儿 锻炼
如何对宝宝进行锻炼

如何对进行阅读胎教

胎教
如何对进行阅读胎教

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

如何对颈部进行护理

美容 美容方法
如何对颈部进行护理

遇见如何对好友进行隐身

手机软件 应用软件
遇见如何对好友进行隐身

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

对齐命令实战运用!(原创)

对齐命令实战运用!(原创)

《天天炫斗》刷图升级经验技巧

《天天炫斗》刷图升级经验技巧
下拉加载更多内容 ↓