假设读者已经拥有一个ToolBar,并且在其父类中拥有一个m_wndToolBar的成员来标示这个toolbar。如果想在其中添加一个ComboBox,步骤如下。
1. 在该toolBar资源中,添加一个item,并且给予一个ID,我们假设为ID_TOOLS_COMBO
2. 在父类头文件中申明一个ComboBox的成员和一个CFont的成员:
CComboBox m_tbCB;// 标示这个combobox
CFont m_ComboFont;//标示combobox的字体
3. 在其父类的OnCreate函数中添加如下代码:
int idx = 0;
while(m_wndToolBar.GetItemID(idx) != ID_TOOLS_COMBO) idx++;
m_wndToolBar.SetButtonInfo(idx,ID_TOOLS_COMBO,TBBS_SEPARATOR,80);//80--width of the combobox
m_wndToolBar.GetItemRect(idx,rc);
rc.top += 1;//up point
rc.bottom += 150;//define the height of the combo box list
if (!m_tbCB.Create(WS_EX_RTLREADING| CBS_DROPDOWNLIST |WS_CHILD |WS_VISIBLE |CBS_AUTOHSCROLL |CBS_HASSTRINGS ,
rc, &m_wndToolBar, ID_TOOLS_COMBO))
{
TRACE0( "Failed to create combobox\n ");
return -1; // fail to create
}
m_ComboFont.CreateFont(14, 0, 0, 0, FW_NORMAL,
FALSE, FALSE, FALSE, 0, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN, "Arial");
m_tbCB.SetFont(&m_ComboFont);
m_tbCB.ShowWindow(SW_SHOW);
通过上述程序,可以在tool bar上构建一个指定索引位置,指定宽度,指定字体以及指定列表长度的combobox。
4.最后,在父类退出的地方(或者析构函数中),对Font资源进行释放:
m_ComboFont.DeleteObject();
大功告成,一个华丽的ComboBox就显示在了ToolBar上了。
如果愿意,还可以将上述的代码嵌入到你的子类化ComboBox类中,这样用起来就方便了。具体做法也不难,大概说下:
a. 子类化ToolBar,也就是给你的ToolBar资源创建一个类,这个类是继承自CToolBar的;在这个类中添加一个成员ComboBox m_cbBox;
b. 自己定义一个公共的成员函数,用来添加一个comboBox 到该tool bar 中,
比如,addComboBox(int idx, int width, CToolBar* pParent, int ID);其实这个函数就是上面那段代码的包装。
c. 在使用时,只要将上述父类中m_wndToolBar成员变量的类型有CToolBar改为刚才你自己创建的类,之后调用其成员
addComboBox()就可以实现一样的功能。详细步骤见链接:
http://www.codeproject.com/Articles/2726/Toolbars-with-embedded-Combo-Boxes