如何在BCGControlBar工程的工具栏里面新增下拉列表控件

时间:2022-01-31 17:59:01
通常情况下,工具栏里面都是一些按钮和图片,很少可以看到下拉列表控件,但是在某些应用场合,也需要用到下拉列表控件。今天在这里就简单讲解下如何在工具栏里添加下拉列表控件。   添加的过程也比较简单,在CMainFrame的OnToolbarReset消息中添加如下代码:
UINT uiToolBarId = (UINT)wp;

switch(uiToolBarId)
{
case IDR_MAINFRAME:
{
CBCGPToolbarComboBoxButton comboBoxButton1(IDC_COMBO_TEST_CONTROL, CImageHash::GetImageOfCommand(IDC_COMBO_TEST_CONTROL, FALSE), CBS_DROPDOWNLIST,
150);
comboBoxButton1.AddItem(
"ComboBox节点1");
comboBoxButton1.SetPrompt(
"节点");

m_wndToolBar.ReplaceButton(IDC_COMBO_TEST_CONTROL, comboBoxButton1);
}
break;
}

当下拉列表控件的选项发生变动时,想获取变动后的选项内容,通过如下方式实现。第一步,在CMainFrame消息映射链中添加ON_CBN_SELENDON消息。 

ON_CBN_SELENDOK(IDC_COMBO_TEST_CONTROL, OnComboTestControl)

同时在CMainFrame的头文件中添加声明,在源文件中添加实现,在实现的内部可以获取变动后的选项内容,代码如下: 

void CMainFrame::OnComboTestControl()
{
CBCGPToolbarComboBoxButton
* pTestControlComboBox = NULL;

CObList listButtons;
if(CBCGPToolBar::GetCommandButtons(IDC_COMBO_TEST_CONTROL, listButtons) > 0)
{
for(POSITION pos = listButtons.GetHeadPosition(); pTestControlComboBox== NULL && pos != NULL;)
{
CBCGPToolbarComboBoxButton
* pComboBox = DYNAMIC_DOWNCAST(CBCGPToolbarComboBoxButton, listButtons.GetNext(pos));
if(pComboBox != NULL && ::GetFocus() == pComboBox->GetHwnd())
{
pTestControlComboBox
= pComboBox;
}
}
}

if(pTestControlComboBox != NULL && pTestControlComboBox->GetComboBox() != NULL)
{
CString strName;
pTestControlComboBox
->GetComboBox()->GetWindowText(strName);
CString strMsg
= ("ComboBox value is :");
strMsg
+= strName;
MessageBox(strMsg);
}
}

当在应用程序的其它视图当中想获取该ComboBox控件时,通过如下方式实现,代码如下: 

CBCGPToolbarComboBoxButton * pTestControl = (CBCGPToolbarComboBoxButton *)(((CMainFrame*)AfxGetMainWnd())->m_wndToolBar.GetButton(1));
pTestControl
->SelectItem(1);
其中,GetButton函数的参数值代表添加的ComboBox控件所处的位置。至此,在BCGControlBar工程的工具栏里添加下拉列表控件已经完成。