VC CComboBox用法总结

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 
     0 0 //  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、付费专栏及课程。

余额充值