如何对 BCGControlBarPro 进行换肤

2016-01-29 11:57 108 1 收藏

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

【 tulaoshi.com - C语言心得技巧 】

如何对 BCGControlBarPro 进行换肤

作者:阙海忠

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com) 下载 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
                        

来源:http://www.tulaoshi.com/n/20160129/1484004.html

延伸阅读
如何对孩子进行智力启蒙 智力是人对环境的适应能力和反应能力,是各种心理能力的总和,包括观察力、注意力、记忆力、思维力、想象力、创造力和实践能力。 观察力和注意力是感知事物的能力,是智力结构的眼睛。 记忆力是回忆和追忆事物的能力,是智力结构的储存器。 思维力是思考问题、解决问题的能力,是智力结构的核心中枢。 想象力是将...
准爸爸的第一次胎教 早就听说,胎教决不是准妈妈一个人的事儿,准爸爸也要积极参与才行。而准爸爸的积极参与不仅能让准妈妈感受到准爸爸对自己的关爱,更能加深准爸爸与胎宝宝之间的感情。 虽然这会儿宝宝与准爸爸之间还隔着妈妈的肚皮见不着面,但TA却非常希望能和爸爸有沟通,也盼望着能提前感受到爸爸对TA的爱哦! 今天我们就分享一下一...
如何对胎儿进行习惯培养 我们每一个人都有着各自的生活习惯,有的人习惯于早睡早起,而有的人喜欢晚睡晚起,但不论我们每个人有什么习惯,养成一种良好的生活习惯是不容易的,有的人可能一辈子生活都是没有规律的图老师。那么这是为什么呢?俗话说,“江山易改、本性难移”。也就是说人一旦养成了一种习惯想改成另一种习惯是很困难的。 那么...
标签: 亲子早教
宝宝早期教育很重要,宝宝早教每个家庭都很重视,那么如何对宝宝进行早教呢?宝宝早教从哪些方面入手呢?今天我们就来了解一下如何对宝宝进行早教? 如何对宝宝进行早教?一、动作的培养和训练 帮助及促进小儿大运动及精细动作的发育,如训练小儿俯卧抬头、翻身、爬、扶坐、扶站、独走、上下楼梯、攀登等。并培养小儿搭积木、握笔画图、折...
如何对冰雪摄影进行构图 一位著名的画家说,构图是音乐,内容是诗文。冰雪摄影达到这个境界绝非易事。特别是构图,这是按下快门前最重要的瞬间。优秀的摄影师在取景器观察拍摄对象的暂短瞬间里不是看见什么拍什么,而是利用这暂短的时间合理、巧妙地安排整个画面的布局,以表现作品的主题和艺术效果。 我在二十多年的冰雪摄影中深深...

经验教程

919

收藏

24
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部