CMFCToolBar 添加下拉列表框

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;
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值