惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
NISL@THU
NISL@THU
E
Exploit-DB.com RSS Feed
L
LINUX DO - 热门话题
L
Lohrmann on Cybersecurity
K
Kaspersky official blog
Project Zero
Project Zero
Cisco Talos Blog
Cisco Talos Blog
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
S
Schneier on Security
G
GRAHAM CLULEY
The Hacker News
The Hacker News
T
Threat Research - Cisco Blogs
Scott Helme
Scott Helme
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy & Cybersecurity Law Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Cyberwarzone
Cyberwarzone
C
CERT Recently Published Vulnerability Notes
T
Tor Project blog
AWS News Blog
AWS News Blog
Simon Willison's Weblog
Simon Willison's Weblog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
爱范儿
爱范儿
P
Privacy International News Feed
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
S
Securelist
G
Google Developers Blog
The Last Watchdog
The Last Watchdog
Google Online Security Blog
Google Online Security Blog
美团技术团队
F
Fortinet All Blogs
小众软件
小众软件
Recorded Future
Recorded Future
V
Visual Studio Blog
B
Blog RSS Feed
H
Help Net Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Google DeepMind News
Google DeepMind News
Blog — PlanetScale
Blog — PlanetScale
博客园 - 聂微东
Stack Overflow Blog
Stack Overflow Blog
Martin Fowler
Martin Fowler
Latest news
Latest news
Spread Privacy
Spread Privacy
H
Heimdal Security Blog

博客园 - 张尹

Windows管道技术简述 内核printf源代码分析 获得控制台程序的输出 如何在控制台程序中读取WORD文档的内容? - 张尹 - 博客园 简单封装的一个彩色进度条 C语言编程技巧汇萃(包含大量实用函数) 一个编程函数集(包含大量C实用函数) MD5算法说明及源码 C51 怎样将1个子程序段定位在1个固定的地址位置? 动态真彩工具栏 一步步制作真彩工具条 [转载精品]C++程序员经常问的11个问题 关于CRichEditCtrl中文字颜色的控制 如何制作Windows自定义边框的对话框 MFC下窗口分割和文字输出的实现 让ListBox控件支持拖动 VC通用控件编程之CSlider控件 CListCtrl使用详解 - 张尹 一个不错的算法
一个实用的 CToolBar 扩展类 CToolBarEx
张尹 · 2007-01-22 · via 博客园 - 张尹

一个实用的 CToolBar 扩展类 CToolBarEx

作者:xiaojin

下载源代码

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

编译环境: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;
}