VS2019 MFC 工具栏增加ComBOX控件的方法和实例【一】

该代码段展示了如何在MFC应用程序中创建一个工具栏,并在其中嵌入组合框。首先定义了CComboBox、CToolBar和CImageList对象,然后在OnCreateToolBar()函数中加载图标列表,创建透明风格的工具栏,并设置按钮文本和图标。最后,添加了一个组合框到工具栏上,填充了一些选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

.h头文件定义变量和创建函数 OnCreateToolBar()

1>CComboBox      m_TypeSelect;

2>CToolBar           m_DlgMainToolBar

3>CImageList        m_DlgToolBarIconList;//图标列表

4>afx_msg void OnCreateToolBar();

void CDoublePathWayReflowerControllerDlg::OnCreateToolBar()
{
	GetClientRect(rcClientOld);
	m_DlgToolBarIconList.Create(16, 16, TRUE | ILC_COLOR32, 20,6);
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICONCURVE)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICONCALIBRATION)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICONTEMALARM))); 
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICONUSERLOGIN)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICONSOFTWAREREGISTER)));
	/*m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON4)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON5)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON6)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON7)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON8)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON9)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON10)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON11)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON12)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON13)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON14)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON15)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON16)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON17)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON18)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON19)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON20)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON21)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON22)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON23)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON24)));
	m_DlgToolBarIconList.Add(LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ICON25)));*/

	/*if (!m_DlgMainToolBar.CreateEx(this,TBSTYLE_FLAT | TBSTYLE_WRAPABLE | TBSTYLE_ALTDRAG, WS_CHILD | WS_VISIBLE | CBRS_ALIGN_ANY | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC, CRect(0, 0, 0, 0)) || !m_DlgMainToolBar.LoadToolBar(IDR_TOOLBARMAINWINDOWN))*/
	if (!m_DlgMainToolBar.CreateEx(this, TBSTYLE_TRANSPARENT | TBSTYLE_LIST /*| TBSTYLE_WRAPABLE | TBSTYLE_ALTDRAG*/,WS_CHILD | WS_VISIBLE| TBSTYLE_LIST | CBRS_ALIGN_ANY | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC, CRect(5, 25, 5, 5))||!m_DlgMainToolBar.LoadToolBar(IDR_TOOLBARMAINWINDOWN))
	
	{
		TRACE0("未能成功创建工具栏!\n");
		AfxMessageBox(_T("工具栏无法创建或创建失败!"), MB_ICONERROR | MB_ICONINFORMATION);
		printf("OnCreateToolBar->工具栏栏创建失败!\n");
		MessageBox(_T("OnCreateToolBar->工具栏栏创建失败\n!"), _T("信息提示!"), MB_OK | MB_OKCANCEL | MB_ICONINFORMATION);
	}

	m_DlgMainToolBar.ShowWindow(SW_SHOW);

	if (m_DlgMainToolBar.GetSafeHwnd() != NULL)
	{   
		m_DlgMainToolBar.GetToolBarCtrl().SetImageList(&m_DlgToolBarIconList);
		m_DlgToolBarIconList.Detach();
		//m_DlgMainToolBar.GetToolBarCtrl().SetHotImageList(&m_DlgToolBarIconList);
		VERIFY(m_DlgMainToolBar.SetButtonText(0, _T("温度曲线 ")));
		VERIFY(m_DlgMainToolBar.SetButtonText(1, _T("温度校准")));
		VERIFY(m_DlgMainToolBar.SetButtonText(2, _T("温度报警")));
		VERIFY(m_DlgMainToolBar.SetButtonText(3, _T("用户登录")));
		VERIFY(m_DlgMainToolBar.SetButtonText(4, _T("软件注册")));
		/*VERIFY(m_DlgMainToolBar.SetButtonText(3, _T("Close")));
		VERIFY(m_DlgMainToolBar.SetButtonText(4, _T("Draw")));
		VERIFY(m_DlgMainToolBar.SetButtonText(5, _T("Draw")));
		VERIFY(m_DlgMainToolBar.SetButtonText(6, _T("Draw")));
		VERIFY(m_DlgMainToolBar.SetButtonText(7, _T("Draw")));
		VERIFY(m_DlgMainToolBar.SetButtonText(8, _T("Draw")));
		VERIFY(m_DlgMainToolBar.SetButtonText(9, _T("Draw")));
		VERIFY(m_DlgMainToolBar.SetButtonText(10, _T("Draw")));
		VERIFY(m_DlgMainToolBar.SetButtonText(11, _T("Draw")));
		VERIFY(m_DlgMainToolBar.SetButtonText(12, _T("Draw")));

		VERIFY(m_DlgMainToolBar.SetButtonText(13, _T("Draw")));
		VERIFY(m_DlgMainToolBar.SetButtonText(14, _T("Draw")));
		VERIFY(m_DlgMainToolBar.SetButtonText(15, _T("Draw")));
		VERIFY(m_DlgMainToolBar.SetButtonText(16, _T("Draw")));
		VERIFY(m_DlgMainToolBar.SetButtonText(17, _T("Draw")));
		VERIFY(m_DlgMainToolBar.SetButtonText(18, _T("Draw")));
		VERIFY(m_DlgMainToolBar.SetButtonText(19, _T("Draw")));
		VERIFY(m_DlgMainToolBar.SetButtonText(20, _T("Draw")));
		VERIFY(m_DlgMainToolBar.SetButtonText(21, _T("Draw")));
		VERIFY(m_DlgMainToolBar.SetButtonText(22, _T("Draw")));
		VERIFY(m_DlgMainToolBar.SetButtonText(23, _T("Draw")));
		VERIFY(m_DlgMainToolBar.SetButtonText(24, _T("Draw")));*/

		nCount = m_DlgMainToolBar.GetCount();
		for (int i = 0; i < nCount; i++)
		{
			m_DlgMainToolBar.SetButtonStyle(i, TBBS_BUTTON);
		}
		/*Create ComBox*/
		int m_Index = 5;
		int m_With = 125;
		CRect m_Rect;
		m_DlgMainToolBar.SetButtonInfo(m_Index, IDC_BUTTON_CONBOX, TBBS_SEPARATOR, m_With);
		int m_height = 16;
		m_DlgMainToolBar.GetItemRect(5, &m_Rect);
		m_Rect.top = 0;
		m_Rect.bottom = m_Rect.top + m_height;
		m_TypeSelect.Create(WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_SORT | CBS_DROPDOWNLIST,
			m_Rect, &m_DlgMainToolBar, 3000);
		m_TypeSelect.AddString(_T(" item0 "));
		m_TypeSelect.AddString(_T(" item1 "));
		m_TypeSelect.AddString(_T(" item2 "));
		m_TypeSelect.AddString(_T(" item3 "));
		m_TypeSelect.AddString(_T(" item4 "));
		m_TypeSelect.SetCurSel(4);
		/*Create ComBox End*/
		CRect temp;
		m_DlgMainToolBar.SetBarStyle(CBRS_ALIGN_ANY | CBRS_TOOLTIPS | CBRS_GRIPPER | CBRS_FLYBY | CBRS_SIZE_DYNAMIC | BTNS_SHOWTEXT | CBRS_FLOATING );
		m_DlgMainToolBar.GetItemRect(0, &temp);
		m_DlgMainToolBar.GetToolBarCtrl().SetButtonSize(CSize(temp.Width(), temp.Height()));
		m_DlgMainToolBar.SetSizes(CSize(temp.Width(), temp.Height()), CSize(16, 16));
		m_DlgMainToolBar.ModifyStyle(0, BTNS_SHOWTEXT | TBSTYLE_EX_MULTICOLUMN | WS_CLIPCHILDREN | TBSTYLE_AUTOSIZE);
		m_DlgMainToolBar.ModifyStyleEx(0, TRANSPARENT);
		m_DlgMainToolBar.SetBorders(5, 25, 5, 5);
		//rcClientNew.top=rcClientNew.top - 20;

		RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST,0, reposQuery, rcClientNew);
		RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);

	}

}

 参考文献:后期重绘慢慢更新

https://www.codeproject.com/Articles/2726/Toolbars-with-embedded-Combo-Boxeshttps://www.codeproject.com/Articles/2726/Toolbars-with-embedded-Combo-Boxes

特点1:美化的并且可自定义的外观 该下拉框使用JS进行渲染。下拉框样式如下: 该外观是由CSS图片控制。通过修改CSS可以很方便地实现更改外观。 QUI树形下拉框不存在IE6中无法被浮动层遮住等问题。 特点2:使用简单 引入脚本相应的CSS之后, 在页面写如下的HTML代码: 然后为其指定JSON数据即可。数据格式: var zNodes1 =[ { id:1, pId:0, name:"父节点1",open:true}, { id:11, pId:1, name:"叶子节点11"}, { id:12, pId:1, name:"叶子节点12"}, { id:13, pId:1, name:"叶子节点13"}, { id:2, pId:0, name:"父节点2 ",open:true}, { id:211, pId:2, name:"叶子节点21"}, { id:212, pId:2, name:"叶子节点22"}, { id:213, pId:2, name:"叶子节点23"}, { id:214, pId:2, name:"叶子节点24"} ]; 特点3:控制某些节点不可选 如果希望某些子节点(例如父节点)不可选择,为该项JSON数据设置clickExpand:true即可,这样点击后不会选中项,而是展开子节点。 特点4:触发close事件 可以为selectTree的div添加close事件,每当内容层关闭时会调用。通过这种方式可以将选中项传递给hidden表单元素,用于提交表单。 特点5:自定义图标 下拉框树结构每个节点都可以自定义图标。效果如下: 特点6:宽度处理 QUI树形下拉框对于宽度的处理方式是:默认会有个宽度,当树结构过宽则内容层会增大宽度用于自适应里面的内容。 还可以为下拉框内容层强制指定个宽度。效果如下: 特点7:树形下拉框可编辑 为下拉框代码添加个editable="true"属性,就把它变成了个可编辑的下拉框,效果如下: 特点8:可通过AJAX方式加载数据 下拉框的树结构可以通过ajax方式加载。详情请参见在线相关示例。 特点9:变成树形多选下拉框 为下拉框添加multiMode="true"属性,可以把它变成树形多选下拉框。效果如下: 当选择完毕后,鼠标移入可以显示所有选择的选项提示。效果如下: 特点10:树形多选下拉框的不分组模式 改变树形多选下拉框的JSON数据,让其不分组。那么就变成个select多选下拉框。效果如下: 特点11:树形下拉框的验证 结合QUI框架的验证机制,可以方便地为树形下拉框添加验证。效果如下: 特点12:树形下拉框动态增删改选项 树形下拉框支持动态增删改选项。结合ajax机制可以方便地实现如下效果: 添加个节点后的效果: 特点13:完美的浏览器兼容性 无论是IE6、IE7、IE8、IE9还是FireFox、Chrome、Safira,甚至在Linux下都保持功能与外观的致性。 声明:本组件内部的树结构采用的是zTree组件,感谢zTree组件作者的支持与授权。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值