您的位置:首页 > 其它

MFC框架下,在ToolBar中添加ComboBox,并且设置ComboBox的字体

2012-08-21 11:25 176 查看
假设读者已经拥有一个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

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mfc 框架 tools