vc真彩工具条的实现
2014-07-15 14:30
225 查看
例子程序最终效果图:
一直在寻找制作一个 24bit 及以上真彩工具条的简单有效方法,在各种VC站点都找到了很多有关这方面的文章和介绍,但是都存在一个不足的地方,介绍的不够详细,对初学者来说有点难度。最近终于有所发现,因此在这里将自己在制作真彩工具条方面的小经验介绍给大家,以期抛砖引玉。
在这里将介绍两个重点的内容,一个是制作真彩工具条的图形工具 Visual toolbar,另一个是在程序中显示工具条的类CtrueColorToolBar。有了这两个利器,几乎能够非常简单快速的制作任何真彩工具条。呵呵。
1、Visual Toolbar工具
Visual Toolbar 是一个工具条制作工具,也是目前唯一的这样的小工具,几乎是一直梦寐以求的超级好用的小工具。呵呵,当我第一次拿到这个东西的时候,只有一个感慨“太实用了!”。
不知道大家以往作工具条的时候是怎样的,反正本人觉得很繁琐,程序员又不是美工,可是为了界面的pp,只好硬着头皮上了,不可能自己画那些图标,那就采用现成的吧,于是只能上网找一些好看得xp图标,然后用 photoshop 拼啊拼得,一不小心就得从来,费时费力。不知道别人都怎么做的,反正搜索了所有的制作真彩工具条的文章,都没有发现作者提供这样的信息或者方法。每次都很纳闷,当然也有一些作者提供了用ico图标作工具条的方法,不够相比这个有点复杂了。
界面非常简单,一看就能够理解和动手操作。只需要加入图标就能够生成。如图所示:
简单吧,把你找到的一些pp的图标一个个加进去吧,就能自动合并成一个真彩工具条位图,而且还可以再拆分,重新组合,前后位置也可以从新排列。呵呵,不到一分钟,一个pp的bmp位图就完成了。而且还能同时生成normal图,hot图,和disable图。
有了这些位图,真彩工具条就算搞定了一半了。
2、CtrueColorToolBar类
CtrueColorToolBar 类是一个专门加载真彩位图制作 toolbar 的很实用的类。
这个类的下载地址是:http://www.codeproject.com/docking/TrueColorToolBar.asp
确实不错,用这个类配合上面的工具,是一个很不错的组合。下面就用一个例子一步步来实现吧。系统 windwos2000+VC 6.0 + sp5。假设用 Visual toolbar 制作好的工具条如图:
(1) 先建立一个基于MFC的SDI标准程序,没啥好说的,一路默认吧。
(2) 这个时候程序会默认生成一个工具条,如图:
先这样放着吧,不理会。
(3)将CtrueColorToolBar类的两个文件拷贝到程序的目录下,并且在FileView中右键单击项目,加入CtrueColorToolBar类的两个文件,如图:
将这两个文件导入进去。然后从新编译一下程序,这时候会发现多了一个CtrueColorToolBar类,这就是了。
(4) 下面将我们准备好的工具条位图加入到程序中吧,Visual Toolbar能同时生成normal位图和diable位图,假设如下面的所示:
一个是normal图形,一个是disable图形:
先将这两个位图文件拷贝到程序的 res 目录下面,然后在 ResourceView 中单击右键,用 Import 导入这两个位图,程序会自动生成两个ID号,当然你可以修改ID为IDB_NORMAL和IDB_DISABLE。可以发现,这个例子想要的是7个 48×48 拼成的工具条。这个时候将用到系统自动生成的工具条了。
(5)找到 toolbar 资源下的 IDR_MAINFRAME 我需要的只是7个工具条按钮,这里多了几个,删除多余的吧。由于我们现在需要增加的是一个48×48的大小的按钮,所以还得修改按钮大小。双击其中任何一个按钮,修改大小为:而每个按钮都默认了ID和操作,所以暂时先不管了。
(6)找到程序的CmainFrame框架类的成员变量m_wndToolBar,这东西就是工具条变量了,系统默认的是Ctoolbar类,将 Ctoolbar修改成CtrueColorToolBar即可。 在程序的引用CtrueColorToolBar类的文件中包含其头文件,本例子是文件MainFrm.h的开头,增加一句:
然后找到程序CmainFrame框架类的操作方法OnCreate函数。这里可是产生工具条的地方。增加这样一条语句:
3个参数分别代表的意义是:48表示工具条按钮大小是48×48,第二个是normal工具条位图ID,第三个是hot工具条位图ID,最后一个是disable工具条位图ID。 增加的位置你参考例子代码。 现在可以编译运行了,怎么用,真彩工具条出来了吧。
(7)最后,你可以和一般程序一样,对系统产生的toolbar资源下的IDR_MAINFRAME工具条的按钮进行设置,编写相应的响应函数即可。例子程序中还有两个位图也添加到资源中了,你可以修改上面m_wndToolBar.LoadTrueColorToolBar函数中后3个参数看看效果,就知道了。
(8)在对话框程序中,添加如下代码创建工具条:
1、从基类CToolBarCtrl中派生出所需要的类CstandardBar。
2、添加图片资源,目前编译器对24位位图支持不好,建议使用256色位图。大小视具体每个按钮的大小和个数而定。如果设定每个按钮的高为32像素,添加6个按钮,则插入的图片资源长度为192像素。对此,读者可自行设定。
现在我们添加五个按钮,高32像素,总长160像素。资源符号为IDR_STANDARDBAR。
3、添加字符串资源。
资源符号 值 字符串资源
IDSTR_JILU 102 记录
IDSTR_BAOCUN 103 保存
IDSTR_CHAZHAO 104 查找
IDSTR_CHAKAN 105 查看
IDSTR_QUIT 106 退出
在CstandardBar类中调用Create函数创建工具栏。代码如下:
BOOL CstandardBar::Create(DWORD dwStyle,
const RECT &rect, CWnd *pParentWnd, UINT nID)
{
BOOL bRet = CToolBarCtrl::Create(dwStyle, rect, pParentWnd, nID);
m_nButtonCount = IDSTR_QUIT - IDSTR_JILU + 1;
SetBitmapSize( CSize(32,32) );
VERIFY(AddBitmap(m_nButtonCount,IDR_STANDARDBAR) != -1);
m_pTBButtons = new TBBUTTON[m_nButtonCount];
for (int nIndex = 0; nIndex < m_nButtonCount; nIndex++)
{
CString string;
string.LoadString(nIndex + IDSTR_JILU);
int nStringLength = string.GetLength() + 1;
TCHAR * pString = string.GetBufferSetLength(nStringLength);
pString[nStringLength] = 0;
pString[nStringLength-1] = 0;
VERIFY((m_pTBButtons[nIndex].iString = AddStrings(pString)) != -1);
string.ReleaseBuffer();
m_pTBButtons[nIndex].fsState =TBSTATE_ENABLED;
m_pTBButtons[nIndex].fsStyle =TBSTYLE_BUTTON;
m_pTBButtons[nIndex].dwData = 0;
m_pTBButtons[nIndex].iBitmap = nIndex;
m_pTBButtons[nIndex].idCommand = nIndex + IDSTR_JILU;
}
m_pTBButtons[m_nButtonCount-1].idCommand=IDCANCEL;
TBBUTTON sepButton;
sepButton.idCommand = 0;
sepButton.fsStyle = TBSTYLE_SEP;
sepButton.fsState = TBSTATE_ENABLED;
sepButton.iString = 0;
sepButton.iBitmap = 0;
sepButton.dwData = 0;
int nIndex;
for (nIndex = 0; nIndex < m_nButtonCount; nIndex++)
{
VERIFY(AddButtons(1,&m_pTBButtons[nIndex]));
if (!((nIndex +1) % 2))
{
VERIFY(AddButtons(1,&sepButton));
}
}
this->SetStyle(TBSTYLE_FLAT|CCS_TOP);
return bRet;
}
4、实例化CstandardBar对象:CstandardBar m_standardBar。注意要包含头文件#include “standardBar.h”
5、在主对话框为CstandardBar对象创建相应的窗口。代码如下:
int CToolBarDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
m_standardBar.Create( WS_VISIBLE | WS_CHILD |WS_BORDER
|TBSTYLE_WRAPABLE | CCS_TOP | CCS_ADJUSTABLE,
CRect(0,0,0,0),this, IDR_STANDARDBAR);
m_standardBar.AutoSize();
return 0;
}
一直在寻找制作一个 24bit 及以上真彩工具条的简单有效方法,在各种VC站点都找到了很多有关这方面的文章和介绍,但是都存在一个不足的地方,介绍的不够详细,对初学者来说有点难度。最近终于有所发现,因此在这里将自己在制作真彩工具条方面的小经验介绍给大家,以期抛砖引玉。
在这里将介绍两个重点的内容,一个是制作真彩工具条的图形工具 Visual toolbar,另一个是在程序中显示工具条的类CtrueColorToolBar。有了这两个利器,几乎能够非常简单快速的制作任何真彩工具条。呵呵。
1、Visual Toolbar工具
Visual Toolbar 是一个工具条制作工具,也是目前唯一的这样的小工具,几乎是一直梦寐以求的超级好用的小工具。呵呵,当我第一次拿到这个东西的时候,只有一个感慨“太实用了!”。
不知道大家以往作工具条的时候是怎样的,反正本人觉得很繁琐,程序员又不是美工,可是为了界面的pp,只好硬着头皮上了,不可能自己画那些图标,那就采用现成的吧,于是只能上网找一些好看得xp图标,然后用 photoshop 拼啊拼得,一不小心就得从来,费时费力。不知道别人都怎么做的,反正搜索了所有的制作真彩工具条的文章,都没有发现作者提供这样的信息或者方法。每次都很纳闷,当然也有一些作者提供了用ico图标作工具条的方法,不够相比这个有点复杂了。
1.
Visual Toolbar 的下载地址:http:
//visualtoolbar.126.com/
界面非常简单,一看就能够理解和动手操作。只需要加入图标就能够生成。如图所示:
简单吧,把你找到的一些pp的图标一个个加进去吧,就能自动合并成一个真彩工具条位图,而且还可以再拆分,重新组合,前后位置也可以从新排列。呵呵,不到一分钟,一个pp的bmp位图就完成了。而且还能同时生成normal图,hot图,和disable图。
有了这些位图,真彩工具条就算搞定了一半了。
2、CtrueColorToolBar类
CtrueColorToolBar 类是一个专门加载真彩位图制作 toolbar 的很实用的类。
这个类的下载地址是:http://www.codeproject.com/docking/TrueColorToolBar.asp
确实不错,用这个类配合上面的工具,是一个很不错的组合。下面就用一个例子一步步来实现吧。系统 windwos2000+VC 6.0 + sp5。假设用 Visual toolbar 制作好的工具条如图:
(1) 先建立一个基于MFC的SDI标准程序,没啥好说的,一路默认吧。
(2) 这个时候程序会默认生成一个工具条,如图:
先这样放着吧,不理会。
(3)将CtrueColorToolBar类的两个文件拷贝到程序的目录下,并且在FileView中右键单击项目,加入CtrueColorToolBar类的两个文件,如图:
将这两个文件导入进去。然后从新编译一下程序,这时候会发现多了一个CtrueColorToolBar类,这就是了。
(4) 下面将我们准备好的工具条位图加入到程序中吧,Visual Toolbar能同时生成normal位图和diable位图,假设如下面的所示:
一个是normal图形,一个是disable图形:
Normal 位图 | Disable 位图 |
(5)找到 toolbar 资源下的 IDR_MAINFRAME 我需要的只是7个工具条按钮,这里多了几个,删除多余的吧。由于我们现在需要增加的是一个48×48的大小的按钮,所以还得修改按钮大小。双击其中任何一个按钮,修改大小为:而每个按钮都默认了ID和操作,所以暂时先不管了。
(6)找到程序的CmainFrame框架类的成员变量m_wndToolBar,这东西就是工具条变量了,系统默认的是Ctoolbar类,将 Ctoolbar修改成CtrueColorToolBar即可。 在程序的引用CtrueColorToolBar类的文件中包含其头文件,本例子是文件MainFrm.h的开头,增加一句:
1.
#include "TrueColorToolBar.h"
在对话框程序中创建真彩对话框:
然后找到程序CmainFrame框架类的操作方法OnCreate函数。这里可是产生工具条的地方。增加这样一条语句:
1.
m_wndToolBar.LoadTrueColorToolBar( 48, IDB_NORMAL, IDB_NORMAL, IDB_DISABLED);
3个参数分别代表的意义是:48表示工具条按钮大小是48×48,第二个是normal工具条位图ID,第三个是hot工具条位图ID,最后一个是disable工具条位图ID。 增加的位置你参考例子代码。 现在可以编译运行了,怎么用,真彩工具条出来了吧。
(7)最后,你可以和一般程序一样,对系统产生的toolbar资源下的IDR_MAINFRAME工具条的按钮进行设置,编写相应的响应函数即可。例子程序中还有两个位图也添加到资源中了,你可以修改上面m_wndToolBar.LoadTrueColorToolBar函数中后3个参数看看效果,就知道了。
(8)在对话框程序中,添加如下代码创建工具条:
1、从基类CToolBarCtrl中派生出所需要的类CstandardBar。
2、添加图片资源,目前编译器对24位位图支持不好,建议使用256色位图。大小视具体每个按钮的大小和个数而定。如果设定每个按钮的高为32像素,添加6个按钮,则插入的图片资源长度为192像素。对此,读者可自行设定。
现在我们添加五个按钮,高32像素,总长160像素。资源符号为IDR_STANDARDBAR。
3、添加字符串资源。
资源符号 值 字符串资源
IDSTR_JILU 102 记录
IDSTR_BAOCUN 103 保存
IDSTR_CHAZHAO 104 查找
IDSTR_CHAKAN 105 查看
IDSTR_QUIT 106 退出
在CstandardBar类中调用Create函数创建工具栏。代码如下:
BOOL CstandardBar::Create(DWORD dwStyle,
const RECT &rect, CWnd *pParentWnd, UINT nID)
{
BOOL bRet = CToolBarCtrl::Create(dwStyle, rect, pParentWnd, nID);
m_nButtonCount = IDSTR_QUIT - IDSTR_JILU + 1;
SetBitmapSize( CSize(32,32) );
VERIFY(AddBitmap(m_nButtonCount,IDR_STANDARDBAR) != -1);
m_pTBButtons = new TBBUTTON[m_nButtonCount];
for (int nIndex = 0; nIndex < m_nButtonCount; nIndex++)
{
CString string;
string.LoadString(nIndex + IDSTR_JILU);
int nStringLength = string.GetLength() + 1;
TCHAR * pString = string.GetBufferSetLength(nStringLength);
pString[nStringLength] = 0;
pString[nStringLength-1] = 0;
VERIFY((m_pTBButtons[nIndex].iString = AddStrings(pString)) != -1);
string.ReleaseBuffer();
m_pTBButtons[nIndex].fsState =TBSTATE_ENABLED;
m_pTBButtons[nIndex].fsStyle =TBSTYLE_BUTTON;
m_pTBButtons[nIndex].dwData = 0;
m_pTBButtons[nIndex].iBitmap = nIndex;
m_pTBButtons[nIndex].idCommand = nIndex + IDSTR_JILU;
}
m_pTBButtons[m_nButtonCount-1].idCommand=IDCANCEL;
TBBUTTON sepButton;
sepButton.idCommand = 0;
sepButton.fsStyle = TBSTYLE_SEP;
sepButton.fsState = TBSTATE_ENABLED;
sepButton.iString = 0;
sepButton.iBitmap = 0;
sepButton.dwData = 0;
int nIndex;
for (nIndex = 0; nIndex < m_nButtonCount; nIndex++)
{
VERIFY(AddButtons(1,&m_pTBButtons[nIndex]));
if (!((nIndex +1) % 2))
{
VERIFY(AddButtons(1,&sepButton));
}
}
this->SetStyle(TBSTYLE_FLAT|CCS_TOP);
return bRet;
}
4、实例化CstandardBar对象:CstandardBar m_standardBar。注意要包含头文件#include “standardBar.h”
5、在主对话框为CstandardBar对象创建相应的窗口。代码如下:
int CToolBarDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
m_standardBar.Create( WS_VISIBLE | WS_CHILD |WS_BORDER
|TBSTYLE_WRAPABLE | CCS_TOP | CCS_ADJUSTABLE,
CRect(0,0,0,0),this, IDR_STANDARDBAR);
m_standardBar.AutoSize();
return 0;
}
相关文章推荐
- VC2010 实现真彩工具条关键代码
- VC真彩工具条
- 在VC++下实现高彩色工具条
- VC++6.0实现真彩工具条
- 【转】在VC++下实现高彩色工具条2011-05-19 14:35引言
- VC++6.0实现真彩工具条
- VC怎样把一副自己画的图存成BMP格式和在VC++下实现高彩色工具条
- vc 基于对话框实现工具条提示显示
- VC++中实现程序互斥运行
- 如何在VC中实现动态菜单
- 用VC实现远程修改NT帐号
- 关于VC++中,两种自定义消息的发送与接收的方法实现进行说明。
- VC++实现拨号上网程序
- VC实现动画应用两则
- VC++实现端口截听
- VC中多语菜单的实现
- 在VC中实现程序在启动时隐藏
- VC实现对不同信号波形相似程度的判别
- 用VC++实现软件的多语种支持 作者:卞远
- 用VC 实现图象渐显和渐隐