VC CComboBox用法總結

VC每日一練,雖然簡單,不動手試一下不能真正記住。windows

複製代碼
大氣象
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);

 

 再在源文件中定義:this

複製代碼
大氣象
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()函數中調用:spa

CComboBox *comboBox=(CComboBox*)GetDlgItem(IDC_COMBO1);
set_DropDownSize(*comboBox,5);// 第二個參數決定高度是顯示幾行
UpdateData(false);
相關文章
相關標籤/搜索