1、经过一个下午的各种纠结和不放弃,最终还是捣鼓出来了这个东西,记录下来,以备查看。
在网上查到了两种方法呢,然后自己试验了下,在vs2010下都可以正确运行。
第一种方法:是来自于 这里:http://blog.sina.com.cn/s/blog_6b5a0745010108tt.html
但是看了这个,很久也弄不出来,还是具体来写一下了:
CMFCToolBar m_toolbar1;
CMFCToolBarComboBoxButton *m_comboButton;
#define ID_COM1 2105
在CMainFrame ::OnCreate中:
if (!m_toolbar1.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_toolbar1.LoadToolBar(IDR_TOOLBAR1))
{
TRACE0("未能创建工具栏\n");
return -1; // 未能创建
}
m_comboButton = new CMFCToolBarComboBoxButton(ID_COM1,
::GetCmdMgr()->GetCmdImage(ID_COM1,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_toolbar1.InsertSeparator();//先添加分隔条
m_toolbar1.InsertButton(*m_comboButton);
然后这样按道理就可以实现了,但是下拉列表框总是不显示,那么在网上查了很多资料,应该在注册表中删除同名文件;
过程:关闭vs2010 ,运行->regedit->HEK_CURRENT_USER/software/应用程序中的文件删除,重新运行vs2010,就可以实现;
CMFCToolComboBoxButton响应事件:
ON_CBN_SELCHANGE(ID_COM1,&CMainFrame::OnComboBox)
ON_COMMAND(ID_COM1,&CMainFrame::ClickComboBox)
void CMainFrame::OnComboBox()
{
CMFCToolBarComboBoxButton *pStcCombo = CMFCToolBarComboBoxButton::GetByCmd(ID_LINESTYLE,TRUE);
UINT curStyle = pStcCombo->GetCurSel();
//UINT curStyle = ((CMainFrame *)theApp.m_pMainWnd)->m_lineStyleComButton->GetCurSel();
CmyDrawDoc *pDoc = GetDocument();
pDoc->SetCurLineStyle(curStyle);
}
第二种方法同样要有这个过程;
第二种方法:使用ReplaceButton;
CMFCToolBarComboBoxButton *comboButton;
CMFCToolBar m_wndToolbarBuild;
在OnCreate中m_wndToolbarBuild 像m_wndToolBar创建,只是loadToolBar(IDR_TOOLBAR2)
在IDR_TOOLBAR2中添加按钮ID为ID_QTLOGO;
事件:
afx_msg LRESULT OnToolbarReset(WPARAM,LPARAM);
ON_REGISTERED_MESSAGE(AFX_WM_RESETTOOLBAR, &CMainFrame::OnToolbarReset)
LRESULT CMainFrame::OnToolbarReset(WPARAM wp,LPARAM)
{
UINT uiToolBarId = (UINT) wp;
switch (uiToolBarId)
{
case IDR_TOOLBAR2:
{
// Replace "Confoguration..." button by combobox:
comboButton = new CMFCToolBarComboBoxButton(ID_QTLOGO, GetCmdMgr()->GetCmdImage(ID_QTLOGO/*, FALSE*/), CBS_DROPDOWNLIST,100);
comboButton->AddItem(_T("Win32 Debug"));
comboButton->AddItem(_T("Win32 Release"));
comboButton->SelectItem(0);
m_wndToolbarBuild.ReplaceButton(ID_QTLOGO, *comboButton);
}
break;
}
return 0;
}