Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9487941
  • 博文数量: 1227
  • 博客积分: 10026
  • 博客等级: 上将
  • 技术积分: 20273
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-16 12:40
文章分类

全部博文(1227)

文章存档

2010年(1)

2008年(1226)

我的朋友

分类: C/C++

2008-04-23 21:41:38

一个实用的 CToolBar 扩展类 CToolBarEx

作者:xiaojin

   我们知道,程序中的工具条是在CMainFrame中生成的,采用的类是CToolBar,使用起来很复杂。为此,对CToolBar的常用功能进行封装,生成了它的一个继承类CToolBarEx,大大简化了操作。本文参考了 以前发表的关于工具条的文章,在此先表示感谢!

编译环境:Windows 2000 Server sp3(en) 、VC 6.0 sp5。

先看使用方法: 先在CMainFrame中定义变量


CToolBarEx  tbex;

在CMainFrame的OnCreate()函数中加入如下代码:

//先创建ToolBar,取代原来的代码

tbex.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP       | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

//设置按钮个数,分割条也要算一个哦

tbex.SetButtonNumber(5);

//加入图片

tbex.AddIcon(AfxGetApp()->LoadIcon(IDR_MAINFRAME));  

tbex.AddIcon(AfxGetApp()->LoadIcon(IDR_TBTYPE));  

tbex.AddIcon(AfxGetApp()->LoadIcon(IDI_SWIRE)); 

tbex.AddIcon(AfxGetApp()->LoadIcon(IDI_ICON1)); 

//设置每个按钮的位置、ID、图片索引和文字

tbex.SetButton(0,ID_APP_ABOUT,0,"员工");

tbex.SetButton(1,ID_APP_EXIT,1,"进料");

//加入分割条

tbex.AddSeparator (2);

tbex.SetButton(3,ID_APP_ABOUT,2,"Swire");

tbex.SetButton(4,ID_APP_ABOUT,3,"Coca");

//设置每个按钮大小

tbex.SetSize();   //或者tbex.SetDefaultSize()

这样,一个漂亮的ToolBar就显现在我们面前,是不是很简单啊。

◆类定义


class CToolBarEx : public CToolBar

{

public:       CToolBarEx();

public:

//设置图片大小  

void SetImageSize(int nImageWidth,int nImageHeight); 

//加入图片

       void AddBitmap(CBitmap* pbmImage, COLORREF crMask);

       void AddBitmap(CBitmap* pbmImage, CBitmap* pbmMask);

void AddIcon(HICON hIcon);

//设置按钮大小为默认大小

       void SetDefaultSize();

//加入分割条

       void AddSeparator(int nButton);

       //设置按钮大小,默认是50X40,具体设定必须符合ToolBar的要求,可以自己调

       void SetSize(int nWidth=50,int nHeight=40);

//设置按钮图片和文字

       void SetButton(int nButton,int nID, int nImage,LPTSTR lpText);

//设置按钮图片无文字

       void SetButton(int nButton,int nID, int nImage);

//设置按钮个数

       void SetButtonNumber(int n);

//加入图片到ToolBarEx,在AddIcon()和AddBitmap()中自动调用

       void SetImage();

//图片变量

       CImageList img;

//图片大小变量

       CSize sizeImage;

       virtual ~CToolBarEx();

protected:

       DECLARE_MESSAGE_MAP()

};

◆类具体实现:

CToolBarEx::CToolBarEx()

{

       sizeImage.cx =20;//默认图片大小为20X20

       sizeImage.cy =20;

       img.Create(sizeImage.cx-1, sizeImage.cy-1, ILC_COLOR8|ILC_MASK, 1,1);

}

CToolBarEx::~CToolBarEx()

{}

void CToolBarEx::SetImage()

{

       this->GetToolBarCtrl().SetImageList (&img);

}

void CToolBarEx::SetButtonNumber(int n)

{   

       SetButtons(NULL,n);

}

void CToolBarEx::SetButton(int nButton, int nID, int nImage,LPTSTR lpText)

{    

SetButtonInfo(nButton, nID, TBSTYLE_BUTTON, nImage);

       SetButtonText(nButton, lpText);   

}

void CToolBarEx::SetButton(int nButton, int nID, int nImage)

{    

SetButtonInfo(nButton, nID, TBSTYLE_BUTTON, nImage);

}

void CToolBarEx::SetSize(int nWidth,int nHeight)

{   

CSize cs;

       cs.cx =nWidth;

       cs.cy =nHeight;

       SetSizes(cs, sizeImage);

}

void CToolBarEx::AddIcon(HICON hIcon)

{     

img.Add (hIcon);

       SetImage();

}

void CToolBarEx::AddSeparator(int nButton)

{     

SetButtonInfo(nButton, 0, TBBS_SEPARATOR, 0);

}

void CToolBarEx::SetDefaultSize()

{

       CRect rectToolBar;

       GetItemRect(0, &rectToolBar); //得到按钮的大小

       SetSizes(rectToolBar.Size (), sizeImage); //设置按钮的大小

}

void CToolBarEx::AddBitmap(CBitmap *pbmImage, CBitmap *pbmMask)

{

       img.Add( pbmImage, pbmMask);

SetImage();

}

void CToolBarEx::AddBitmap(CBitmap *pbmImage, COLORREF crMask)

{

       img.Add( pbmImage, crMask);

SetImage();

}

void CToolBarEx::SetImageSize(int nImageWidth,int nImageHeight)

{

   sizeImage.cx = nImageWidth;

   sizeImage.cy =nImageHeight;

}

阅读(329) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~