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


假设读者已经拥有一个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
 
 

你可能感兴趣的:(windows)