MFC工具栏设置多彩按钮以及在工具栏添加其他控件
2013-03-21 22:34
357 查看
一个好的软件,界面非常重要,其中的功能要让客户一目了然。而这些可以借助于工具栏,如在Microsoft Word中的工具栏,相关的操作基本上都可以借助工具栏来完成。下面,我就将我知道的关于VC中关于工具栏的一些东西写写,与大家共享,不对的地方请大家 帮忙纠正。
下面我以Visual Studio.net 2003下的单文档/视图的程序为例说明。
在VS中,实现工具栏的类是CToolBar, 在新建一个单文档/视图程序的时候,在框架类的OnCreate中,系统会自动创建一个工具条。如下:
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("未能创建工具栏/n");
return -1; // 未能创建
}
方法一:
想要修改或者增加工具栏中的 内容,一种方法是进入“资源视图”,然后选择"ToolBar",然后对工具栏中的内容进行修改或者添加,并为它们添加响应消息。这是最简单,有时候也是最直接有效的方法。
方法二:
如果你想创建一个更加符合自己要求的工具条,而不想被资源视图中的ToolBar所限制的话,那么你可以自己写程序 来Create ToolBar. 这样的话,你只需要将上面工程自动生成的那段代码注释掉,然后自己写一个函数,这里取名为CreateExToolBar(); 然后用这个函数代替上面这段代码。
然后加入自己特色的工具条代码,当然,先还是要创建一个工具条,如下:
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC))
{
return -1;
}
注意,不要m_wndToolBar.LoadToolBar(IDR_MAINFRAME),这样,你就可以在新 建的工具条中想干什么就干什么。这里,我们不得提到另外一个类,CToolBarCtrl类,至于它和CToolBar之间的关系与区别,随便在网上搜一 下就能找到,这里就不多说了。但是用m_wndToolBar.GetToolBarCtrl()可以由CToolBar对象得到它的 CToolBarCtrl对象,这样也在CToolBar对象中也能操作CToolBarCtrl。
比如设置工具条中的每个按钮的长宽,如下:
//m_wndToolBar.GetToolBarCtrl().SetButtonWidth(40,80)
应该是m_wndToolBar.GetToolBarCtrl().SetButtonSize(CSize(40,40));
注意设置大小的时候最好比图像中的大一点
按照我的理解,这两个类的功能可以互补。
当然,你还可以利用CToolBar类的其他方法对你的工具条进行设置,如设置每个Button的文本显示:
m_wndToolBar.SetButtonText(1,"系统消息");
此外,关于工具条的其他属性,可以参考
m_wndToolBar.SetButtonInfo函数来进行设置。
方法三:
加入你还想让你的工具条更漂亮一点,可以在每个按钮上显示一些图标之类的,那么你会涉及到另外一个类:CImageList类,由它的名字可以看出,这是一个图像/图标列表类,它的用法如下:
1.创建一个CImageList对象,如下:
CImageList img;
img.Create(22,22,ILC_COLOR8|ILC_MASK,2,2);
具体参数意思,请自己参考MSDN或者CSDN。
2. 可有可无的,设置图标的背景颜色
img.SetBkColor(::GetSysColor(COLOR_BTNFACE))
3. 装入图像/图标进入列表
img.Add(AfxGetApp->LoadIcon(ID)
4. 在工具条中设置这个图像列表
m_wndToolBar.GetToolBarCtrl().SetImageList(&img)
这里多说两句,有两个函数,SetImageList和SetHotImageList,其中后面这个函数是用来设置当鼠标放在该button上时,会高亮显示的图像列表。而前面这个是当鼠标没有在它上面时显示的图标。
5. 释放图像列表对象
img.Detach()
现在,就可以用在工具栏中用这个图像列表了。如下:
m_wndToolBar.GetToolBarCtrl().SetButtonSize(CSize(40,40));
m_wndToolBar.SetButtonInfo(0, ID, TBSTYLE_BUTTON,0);
第一个1是表示工具栏中第一个空间,TBSTYLE_BUTTON表示工具栏中第一个控件是Button.
后面一个1是表示显示图像列表中的第1幅图。
好了,一切OK,运行一下就可以看到漂亮的工具条了。
方法四:
如果你在工具栏中不光有按钮,还有其他的空间,而且工具栏中按照功能进行分组。就像下面这个工具栏一样,是不是很酷呢!
如果上面的方法你都掌握了,那么这里再介绍一个类,CReBar类,就可以轻松搞定了。其实,CReBar类有点像CToolBar, 在CReBar中,可以包含几个Band,每个Band中可以包含不同的各式控件。并且各个Band可以自由的调整大小。
它的用法如下:
1. 首先创建一个CReBar对象
CReBar m_wndReBar;
m_wndReBar.Create(this);
2. 将新建的ToolBar或者其他窗口加入到ReBar中
m_wndReBar.AddBar(&m_wndToolBar)
3. 对CReBar的属性进行一个设置
具体代码如下:
//改变一些属性
REBARBANDINFO rbbi;
rbbi.cbSize = sizeof(rbbi); //这个是必须填
rbbi.fMask = RBBIM_CHILDSIZE | RBBIM_IDEALSIZE | RBBIM_SIZE|RBBIM_BACKGROUND;
//工具条的宽度
rbbi.cxMinChild = rectToolBar.Width();
//高度
rbbi.cyMinChild = rectToolBar.Height();
//下面这行代码是为工具条加入背景位图,请注意上rbbi.fMask中RBBIM_BACKGROUND标志
rbbi.hbmBack = LoadBitmap(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_TOOLBARBKMAP));
rbbi.cx = rbbi.cxIdeal = rectToolBar.Width() * 10;
//设置属性
m_wndReBar.GetReBarCtrl().SetBandInfo(0, &rbbi);
具体的这段代码分析,大家可以参考一个MSDN,多解释还不如自己亲身体会一下。
OK,基本就是这样,具体细节大家可以自己继续往下探讨。
在工具栏添加其他控件:
首先工具栏是在OnCreat中产生的,所以在这里修改
先在MainFram头文件中添加对应的空间变量m_Static,m_edit,m_Button
在资源视图中的工具栏添加三个临时的按钮,ID设为IDC_STATIC,IDC_EDIT,IDOK
1.添加静态控件
2.添加编辑控件
3.添加按钮控件
原文:http://blog.csdn.net/feimashenhua/article/details/5189226
下面我以Visual Studio.net 2003下的单文档/视图的程序为例说明。
在VS中,实现工具栏的类是CToolBar, 在新建一个单文档/视图程序的时候,在框架类的OnCreate中,系统会自动创建一个工具条。如下:
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("未能创建工具栏/n");
return -1; // 未能创建
}
方法一:
想要修改或者增加工具栏中的 内容,一种方法是进入“资源视图”,然后选择"ToolBar",然后对工具栏中的内容进行修改或者添加,并为它们添加响应消息。这是最简单,有时候也是最直接有效的方法。
方法二:
如果你想创建一个更加符合自己要求的工具条,而不想被资源视图中的ToolBar所限制的话,那么你可以自己写程序 来Create ToolBar. 这样的话,你只需要将上面工程自动生成的那段代码注释掉,然后自己写一个函数,这里取名为CreateExToolBar(); 然后用这个函数代替上面这段代码。
然后加入自己特色的工具条代码,当然,先还是要创建一个工具条,如下:
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC))
{
return -1;
}
注意,不要m_wndToolBar.LoadToolBar(IDR_MAINFRAME),这样,你就可以在新 建的工具条中想干什么就干什么。这里,我们不得提到另外一个类,CToolBarCtrl类,至于它和CToolBar之间的关系与区别,随便在网上搜一 下就能找到,这里就不多说了。但是用m_wndToolBar.GetToolBarCtrl()可以由CToolBar对象得到它的 CToolBarCtrl对象,这样也在CToolBar对象中也能操作CToolBarCtrl。
比如设置工具条中的每个按钮的长宽,如下:
//m_wndToolBar.GetToolBarCtrl().SetButtonWidth(40,80)
应该是m_wndToolBar.GetToolBarCtrl().SetButtonSize(CSize(40,40));
注意设置大小的时候最好比图像中的大一点
按照我的理解,这两个类的功能可以互补。
当然,你还可以利用CToolBar类的其他方法对你的工具条进行设置,如设置每个Button的文本显示:
m_wndToolBar.SetButtonText(1,"系统消息");
此外,关于工具条的其他属性,可以参考
m_wndToolBar.SetButtonInfo函数来进行设置。
方法三:
加入你还想让你的工具条更漂亮一点,可以在每个按钮上显示一些图标之类的,那么你会涉及到另外一个类:CImageList类,由它的名字可以看出,这是一个图像/图标列表类,它的用法如下:
1.创建一个CImageList对象,如下:
CImageList img;
img.Create(22,22,ILC_COLOR8|ILC_MASK,2,2);
具体参数意思,请自己参考MSDN或者CSDN。
2. 可有可无的,设置图标的背景颜色
img.SetBkColor(::GetSysColor(COLOR_BTNFACE))
3. 装入图像/图标进入列表
img.Add(AfxGetApp->LoadIcon(ID)
4. 在工具条中设置这个图像列表
m_wndToolBar.GetToolBarCtrl().SetImageList(&img)
这里多说两句,有两个函数,SetImageList和SetHotImageList,其中后面这个函数是用来设置当鼠标放在该button上时,会高亮显示的图像列表。而前面这个是当鼠标没有在它上面时显示的图标。
5. 释放图像列表对象
img.Detach()
现在,就可以用在工具栏中用这个图像列表了。如下:
m_wndToolBar.GetToolBarCtrl().SetButtonSize(CSize(40,40));
m_wndToolBar.SetButtonInfo(0, ID, TBSTYLE_BUTTON,0);
第一个1是表示工具栏中第一个空间,TBSTYLE_BUTTON表示工具栏中第一个控件是Button.
后面一个1是表示显示图像列表中的第1幅图。
好了,一切OK,运行一下就可以看到漂亮的工具条了。
方法四:
如果你在工具栏中不光有按钮,还有其他的空间,而且工具栏中按照功能进行分组。就像下面这个工具栏一样,是不是很酷呢!
如果上面的方法你都掌握了,那么这里再介绍一个类,CReBar类,就可以轻松搞定了。其实,CReBar类有点像CToolBar, 在CReBar中,可以包含几个Band,每个Band中可以包含不同的各式控件。并且各个Band可以自由的调整大小。
它的用法如下:
1. 首先创建一个CReBar对象
CReBar m_wndReBar;
m_wndReBar.Create(this);
2. 将新建的ToolBar或者其他窗口加入到ReBar中
m_wndReBar.AddBar(&m_wndToolBar)
3. 对CReBar的属性进行一个设置
具体代码如下:
//改变一些属性
REBARBANDINFO rbbi;
rbbi.cbSize = sizeof(rbbi); //这个是必须填
rbbi.fMask = RBBIM_CHILDSIZE | RBBIM_IDEALSIZE | RBBIM_SIZE|RBBIM_BACKGROUND;
//工具条的宽度
rbbi.cxMinChild = rectToolBar.Width();
//高度
rbbi.cyMinChild = rectToolBar.Height();
//下面这行代码是为工具条加入背景位图,请注意上rbbi.fMask中RBBIM_BACKGROUND标志
rbbi.hbmBack = LoadBitmap(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_TOOLBARBKMAP));
rbbi.cx = rbbi.cxIdeal = rectToolBar.Width() * 10;
//设置属性
m_wndReBar.GetReBarCtrl().SetBandInfo(0, &rbbi);
具体的这段代码分析,大家可以参考一个MSDN,多解释还不如自己亲身体会一下。
OK,基本就是这样,具体细节大家可以自己继续往下探讨。
在工具栏添加其他控件:
首先工具栏是在OnCreat中产生的,所以在这里修改
先在MainFram头文件中添加对应的空间变量m_Static,m_edit,m_Button
在资源视图中的工具栏添加三个临时的按钮,ID设为IDC_STATIC,IDC_EDIT,IDOK
1.添加静态控件
CRect rect2; m_wndToolBar.SetButtonInfo(8,IDC_STATIC,TBSTYLE_SEP,165); //设置一个分割线,参数:位置,空间ID,工具栏风格,大小 m_wndToolBar.GetItemRect(8,&rect2); //得到分割线的矩形大小 rect2.top+=10;rect2.left+=8; m_Static.Create("请输入服务器IP地址:",WS_VISIBLE,rect2,&m_wndToolBar,IDC_STATIC);
2.添加编辑控件
m_wndToolBar.SetButtonInfo(9,IDC_EDIT,TBSTYLE_SEP,150); //扩大分隔条宽度 m_wndToolBar.GetItemRect(9,&rect2); CRect rect(rect2.left,rect2.top+8,rect2.right,rect2.bottom-10); m_edit.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|ES_WANTRETURN,rect,&m_wndToolBar,IDC_EDIT);
3.添加按钮控件
m_wndToolBar.SetButtonInfo(10,IDC_OK,TBSTYLE_SEP,50); m_wndToolBar.GetItemRect(10,&rect2); rect2.top+=10;rect2.left+=8;rect2.bottom-=10; m_Button.Create("确定",WS_VISIBLE,rect2,&m_wndToolBar,IDC_OK); m_Button.SetCheck(0);
原文:http://blog.csdn.net/feimashenhua/article/details/5189226
相关文章推荐
- MFC单文档窗口添加按钮控件
- MFC中button控件背景色和字体的设置,或者可以采用添加背景图片的方法;已验证有效MFC其他的简单使用使用
- ASP.NET高级里面的repeater控件的应用实现样式设置,并添加删除按钮
- MFC中CSplitter的应用以及在View中添加按钮
- VC MFC对话框中按钮背景色以及大小设置
- paip.提升用户体验---c++ QPushButton按钮控件透明以及不规则按钮以及 鼠标越过动态设置
- 在工具栏(ToolBar)上添加ComboBox控件,为何每次在下拉列表中选择时,都会自动的选中工具栏上的一个按钮?
- MFC动态添加按钮以及消息响应
- MFC中利用picture control控件设置闪烁按钮。(控件以加载bitmap位图为例)
- MFC 单文档中添加按钮控件
- MFC视图中字体设置及控件添加
- 【VC+MFC】在工具栏上添加ComboBox控件的方法
- MFC工具条CToolBar添加非按钮控件CComboBox
- VS2010 MFC中在对话框上添加工具栏以及工具栏提示信息并改变图标支持256色
- 430的VS2015单文档MFC学习笔记之创建以及添加按钮
- JScrollPane控件中添加其他控件的问题&&JScrollPane设置滚动条&&调整滚动速度
- MFC工具栏ToolBar按钮添加下拉菜单
- VS2010/MFC 按钮控件添加bmp图片背景
- MFC 单文档中添加按钮控件
- JScrollPane控件中添加其他控件的问题&&JScrollPane设置滚动条&&调整滚动速度