VC CComboBox用法总结

本文介绍了一种在VC++中优化CComboBox组件的方法,通过自定义函数set_DropDownSize调整下拉列表的高度,实现更友好的用户体验。此外,还展示了如何插入字符串并获取当前选中的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VC每日一练,虽然简单,不动手试一下不能真正记住。

ExpandedBlockStart.gif大气象
CComboBox *comboBox=(CComboBox*)GetDlgItem(IDC_COMBO1);

comboBox
->InsertString(0,_T("9:30 "));
comboBox
->InsertString(1, _T("10:30 ")); 
comboBox
->SetCurSel(1); //设置选中的项
//取得选中的值
CString selStr;
int nIndex = comboBox->GetCurSel();//取得选中的索引
comboBox->GetLBText(nIndex,selStr);

MessageBox(selStr);

 默认ComboBox显示一个很短的下拉框,很不方便。这里有个函数,可以让你设置下拉列表的高度,很方便。
先在头文件中声明:

 

public:
    
void set_DropDownSize(CComboBox& box, UINT LinesToDisplay);

 

 再在源文件中定义:

ExpandedBlockStart.gif大气象
void CMySdiView::set_DropDownSize(CComboBox& box, UINT LinesToDisplay) 
/*-------------------------------------------------------------------------- 
* Purpose: Set the proper number of lines in a drop-down list or 
* combo box. 
* Description: Resizes the combo box window to fit the proper number 
* of lines. The window must exist before calling this function. 
* This function should be called when the combo box is created, and when 
* the font of the combo box changes. (e.g. WM_SETTINGCHANGE) 
* Testing needed: 
* Are there cases where SM_CYBORDER should be used instead of SM_CYEDGE? 
* owner-draw variable height combo box 
* Subclassed combo box with horizontal scroll-bar 
* Returns: nothing 
* Author: KTM 
*--------------------------------------------------------------------------
*/ 

    ASSERT(IsWindow(box)); 
// Window must exist or SetWindowPos won't work 

    CRect cbSize; 
// current size of combo box 
    int Height; // new height for drop-down portion of combo box 

    box.GetClientRect(cbSize); 
    Height 
= box.GetItemHeight(-1); // start with size of the edit-box portion 
    Height += box.GetItemHeight(0* LinesToDisplay; // add height of lines of text 

    
// Note: The use of SM_CYEDGE assumes that we're using Windows '95 
    
// Now add on the height of the border of the edit box 
    Height += GetSystemMetrics(SM_CYEDGE) * 2// top & bottom edges 

    
// The height of the border of the drop-down box 
    Height += GetSystemMetrics(SM_CYEDGE) * 2// top & bottom edges 

    
// now set the size of the window 
    box.SetWindowPos(NULL, // not relative to any other windows 
    00// TopLeft corner doesn't change 
    cbSize.right, Height, // existing width, new height 
    SWP_NOMOVE | SWP_NOZORDER // don't move box or change z-ordering. 
    ); 

 

再在OnInitialUpdate()函数中调用:

CComboBox *comboBox=(CComboBox*)GetDlgItem(IDC_COMBO1);
set_DropDownSize(
*comboBox,5);// 第二个参数决定高度是显示几行
UpdateData(
false);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值