[VC]得到/设置DropDown ComboBox的文字

类别:VC语言 点击:0 评论:0 推荐:

在使用DropDown类型的ComboBox时,如果使用者输入非ComboBox中列出的值,那么ComboBox的GetCurSel()的值是CB_ERR,相关的GetLBText()和GetLBTextLen()因为没有index也就无法工作。

在DDX时,可以把ComboBox和CString对应起来,采用它的原理,就可以自己来得到或设置DropDown ComboBox的文字了。

//得到ComboBox的文字
void GetComboBoxString(HWND hWndCtrl, CString& value)
{
    // just get current edit item text (or drop list static)
    int nLen = ::GetWindowTextLength(hWndCtrl);
    if (nLen > 0)
    {
        // get known length
        ::GetWindowText(hWndCtrl, value.GetBufferSetLength(nLen), nLen+1);
    }
    else
    {
        // for drop lists GetWindowTextLength does not work - assume
        //  max of 255 characters
        ::GetWindowText(hWndCtrl, value.GetBuffer(255), 255+1);
    }
    value.ReleaseBuffer();
}

//设置ComboBox的文字
void SetComboBoxString(HWND hWndCtrl, const CString& value)
{
    // set current selection based on model string
    OutputDebugString("SetComboBoxString:" + value);
    if (::SendMessage(hWndCtrl, CB_SELECTSTRING, (WPARAM)-1,
        (LPARAM)(LPCTSTR)value) == CB_ERR)
    {
        // just set the edit text (will be ignored if DROPDOWNLIST)
        AfxSetWindowText(hWndCtrl, value);
    }
}

本文地址:http://com.8s8s.com/it/it626.htm