博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VS2008 工具栏CMFCToolBar的使用总结(转)
阅读量:5239 次
发布时间:2019-06-14

本文共 3017 字,大约阅读时间需要 10 分钟。

(一)自定义工具栏

自定义工具栏,分两种情况:一是直接添加工具栏,并自己绘制图标;二是,添加工具栏,然后与BMP关联,与VC6.0中的自定义彩色工具栏类似。

1、  自绘工具栏

1)添加Toolbar 资源,并设置工具条ID,如IDR_TOOLBAR1;编辑工具条,添加相应的项,设置项的ID,绘制各自图标的。

2)在MainFrm.h中添加Toolbar变量:

public: 

            CMFCToolBar m_toolbar1;

3)在MainFrm.cpp中的OnCreate中添加代码:

if((!m_toolbar1.CreateEx(this, TBSTYLE_FLAT, WS_CHILD |WS_VISIBLE |CBRS_TOP |CBRS_GRIPPER |CBRS_TOOLTIPS |CBRS_FLYBY |CBRS_SIZE_DYNAMIC,

CRect(1,1,1,1),IDR_TOOLBAR1)

|| (!m_ toolbar1.LoadToolBar(theApp.m_bHiColorIcons ? IDR_TOOLBAR1 : 0))

{

  TRACE0("Failed to create toolbar\n");

  return -1;      // fail to create

}

m_ toolbar1.SetWindowText(_T("MyToolbar"));

…………

m_ toolbar1.EnableDocking(CBRS_ALIGN_ANY);

…………

DockPane(&m_ toolbar1);

 

4)为各项添加各自需要的响应事件即可。

注意,VS2008中,没有VC6.0那样方便的ClassWizard,所以,要在CMainFrame的属性的事件去找,若项ID与菜单的ID是相关联,则能在事件列表中找到相应的ID ;否则,只得靠手动添加响应事件了。

 

2、  位图关联工具栏

1)添加Toolbar 资源,并设置工具条ID,如IDR_TOOLBAR1;编辑工具条,添加相应的项,设置项的ID,绘制各自图标的。

2)导入自己的位图资源,,ID设为:IDB_BITMAP_TOOLBAR

3)在MainFrm.h中添加Toolbar变量:

public:

           CMFCToolBar m_toolbar1;

4)在MainFrm.cpp中的OnCreate中添加代码:

if((!m_toolbar1.CreateEx(this, TBSTYLE_FLAT, WS_CHILD |WS_VISIBLE |CBRS_TOP |CBRS_GRIPPER |CBRS_TOOLTIPS |CBRS_FLYBY |CBRS_SIZE_DYNAMIC,

CRect(1,1,1,1),IDR_TOOLBAR1)

|| (!m_ toolbar1.LoadToolBar(IDR_TOOLBAR1,0,0,TRUE,0,0,IDB_BITMAP_TOOLBAR))

//与前面方法的区别在此

{

  TRACE0("Failed to create toolbar\n");

  return -1;      // fail to create

}

m_ toolbar1.SetWindowText(_T("MyToolbar"));

…………

m_ toolbar1.EnableDocking(CBRS_ALIGN_ANY);

…………

DockPane(&m_ toolbar1);

5)为各项添加各自需要的响应事件即可。

 

(二)   在工具栏上添加组合框

在网上查找到的资料:

VC2008在CMFCToolBar工具栏中加入组合框:(这种方法,我没实现了)

VC 2010:CMFCToolbar工具条中加入组合框  :(利用这种方法,实现了我所要求的功能)

总结得出,在工具栏上添加组合框的操作如下:

1)自定义ComboBox的ID。在Resource.h中定义为(自己手动添加的定义)

#define  IDR_COM             32800

2)在MainFrm.h中添加工具栏组合框指针变量:

public:

            CMFCToolBarComboBoxButton  *m_comboButton;

3)在MainFrm.cpp中的OnCreate中添加代码:

       …………

       m_comboButton = new CMFCToolBarComboBoxButton(IDR_COM,

              GetCmdMrg()->GetCmdImage(IDR_COM,FALSE),// 工具条位图中的图像序号

              CBS_DROPDOWNLIST,                                             //组合框类型

               100);                                                                             //组合框的宽度

       m_ comboButton->EnableWindow(TRUE);

       m_ comboButton->SetCenterVert();

       m_ comboButton->SetDropDownHeight(100);//设置下拉列表的高度

       m_ comboButton->SetFlatMode();

       //添加内容

       m_ comboButton->AddItem(_T(“Once”));

       m_ comboButton->AddItem(_T(“If Only”));

       m_ comboButton->AddItem(_T(“P.S.I Love You”));

       m_ comboButton->AddItem(_T(“Love Me If You Dare”));

       m_ comboButton->SelectItem(0);//默认选中

      

       //添加到工具栏

       m_wndToolBar.InsertSeparator();//先添加分隔条

       m_wndToolBar.InsertButton(m_ comboButton);

//在使用中,遇到这个情况,MSDN中InsertButton为public成员函数,而在CMFCToolBar类的声明中却为protected成员,我解决的方法是把它改为public成员。目前我没有找其他解决方法。若以后找到,再更新。

…………

4)添加响应

1)在MainFrm.h中添加:

       afx_msg void OnSelChangeClick();//SEL_CHANGE

       afx_msg void OnClickComboBox();//ON_COMMAND

2)在MainFrm.cpp中添加消息映射和消息响应函数

……

       ON_CBN_SELCHANGE(IDR_COM, &CMainFrame::OnSelChangeClick)

       ON_COMMAND(IDR_COM, &CMainFrame::OnClickComboBox)

END_MESSAGE_MAP()

 

void CMainFrame::OnSelChangeClick()

{

       //可以添加需要处理的代码

}

 

void CMainFrame::OnClickComboBox()

{

       //不做任何处理,但必须添加,否则组合框是灰色不可用的

}

 

到此,添加操作完成。

上述所有操作,都经本人在VS2008环境下验证通过。

效果如下:

 

转载于:https://www.cnblogs.com/Victorzsg/p/3423461.html

你可能感兴趣的文章
【译】在Asp.Net中操作PDF - iTextSharp - 使用字体
查看>>
.net 文本框只允许输入XX,(正则表达式)
查看>>
实验2-2
查看>>
MongoDB遇到的疑似数据丢失的问题。不要用InsertMany!
查看>>
android smack MultiUserChat.getHostedRooms( NullPointerException)
查看>>
IOS Google语音识别更新啦!!!
查看>>
[置顶] Linux终端中使用上一命令减少键盘输入
查看>>
BootScrap
查看>>
【Python学习笔记】1.基础知识
查看>>
梦断代码阅读笔记02
查看>>
selenium学习中遇到的问题
查看>>
[Linux]PHP-FPM与NGINX的两种通讯方式
查看>>
Java实现二分查找
查看>>
架构图-模型
查看>>
黑马程序员_Java基础枚举类型
查看>>
UIImage 和 iOS 图片压缩UIImage / UIImageVIew
查看>>
django ORM创建数据库方法
查看>>
php7 新特性整理
查看>>
RabbitMQ、Redis、Memcache、SQLAlchemy
查看>>
知识不是来炫耀的,而是来分享的-----现在的人们却…似乎开始变味了…
查看>>