工具栏上创建ComboBox组合框控件,框架响应消息

来源:互联网 发布:bootstrap modal.js 编辑:程序博客网 时间:2024/05/21 19:22

由于业务需要,在原有程序的基础上需要增加几项新的功能。主程序是没有顶部菜单的MDI窗口,考虑在多视环境下的操作实现比较麻烦,故采用主框架响应组合框的消息函数。

创建ComboBox控件
步骤:
1〉在资源里添加一个按钮,命名为ID_COMMBO。
2〉、添加新类class CComboToolBar,
class CComboToolBar : public CToolBar
{
public:
CComboBox  m_comboBox; //手动添加
};
我的方法是:向导-〉MFC类-〉CToolBarCtrl,然后将CToolBarCtrl改为CToolBar即可。
3〉、在框架类的OnCreate()函数中添加创建代码。
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
int index = 0;
CRect rect;

while (m_wndToolBar.GetItemID(index) != ID_COMMBO) index++;
m_wndToolBar.SetButtonInfo(index,ID_COMMBO,TBBS_SEPARATOR,112);
m_wndToolBar.GetItemRect(index,&rect);
rect.InflateRect(0, 0, 0, 100);
if (!m_wndToolBar.m_comboBox.Create(WS_CHILD|WS_VISIBLE|CBS_AUTOHSCROLL|
CBS_DROPDOWNLIST|CBS_HASSTRINGS,
rect, &m_wndToolBar, ID_COMMBO))
{
TRACE0("Failed to create combo-box/n");
return FALSE;
}

m_wndToolBar.m_comboBox.ShowWindow(SW_SHOW);
m_wndToolBar.m_comboBox.AddString("单点多日");
m_wndToolBar.m_comboBox.AddString("多点单日");
m_wndToolBar.m_comboBox.AddString("月度统计");
m_wndToolBar.m_comboBox.AddString("年度统计");
m_wndToolBar.m_comboBox.SetCurSel(0);

/*********方法二****************************/
// CString item[4] = {"单点多日","多点单日","月度统计","年度统计"};
// for(int i=0; i<4; i++)
// m_wndToolBar.m_comboBox.AddString(item[i]);
// m_wndToolBar.m_comboBox.SetCurSel(0);

}

记得在框架类中加上 #include “CComboToolBar.h”

4>、在框架中添加消息函数
 由于组合框是动态创建的,所以消息函数只能手动添加
 //MainFrame.h
 //{{AFX_MSG(CMainFrame)
 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
 afx_msg void OnButtonui();
 //}}AFX_MSG

 afx_msg void OnDropdown();
 DECLARE_MESSAGE_MAP()

 //MainFrame.cpp
 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
 //{{AFX_MSG_MAP(CMainFrame)
 
 //}}AFX_MSG_MAP
 ON_CBN_SELCHANGE(ID_COMMBO,OnDropdown)
 END_MESSAGE_MAP()

 void CMainFrame::OnDropdown()
{
  int m_nMode = m_wndToolBar.m_comboBox.GetCurSel();
CString ss;
ss.Format("nSel=%d",nSel);
AfxMessageBox(ss);
}

OK,大功告成。