通常情况下,工具栏里面都是一些按钮和图片,很少可以看到下拉列表控件,但是在某些应用场合,也需要用到下拉列表控件。今天在这里就简单讲解下如何在工具栏里添加下拉列表控件。
添加的过程也比较简单,在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工程的工具栏里添加下拉列表控件已经完成。