首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

取得/設定 DropDown ComboBox 文字的通用函式

     編輯:VC 教學

問題背景

DropDown 型別的 ComboBox 允許使用者輸入清單外文字。此時 GetCurSel() 回傳 CB_ERR,導致 GetLBText() 無法運作。需直接從編輯控件取得/設定文字。

解決方案:模擬 DDX 機制

MFC 的 DDX_CBString 內部即透過 GetWindowText/SetWindowText 處理此情況,參考其原理封裝通用函式。

取得 ComboBox 文字

void GetComboBoxString(HWND hWndCtrl, CString& value)
{
    int nLen = ::GetWindowTextLength(hWndCtrl);
    if (nLen > 0) {
        ::GetWindowText(hWndCtrl, value.GetBufferSetLength(nLen), nLen + 1);
    } else {
        // DropDownList 模式下 GetWindowTextLength 可能回傳 0
        ::GetWindowText(hWndCtrl, value.GetBuffer(255), 256);
    }
    value.ReleaseBuffer();
}

設定 ComboBox 文字

void SetComboBoxString(HWND hWndCtrl, const CString& value)
{
    OutputDebugString("SetComboBoxString:" + value);
    // 嘗試在清單中尋找匹配項目並選取
    if (::SendMessage(hWndCtrl, CB_SELECTSTRING, (WPARAM)-1, (LPARAM)(LPCTSTR)value) == CB_ERR) {
        // 清單無匹配:直接設定編輯控件文字(DropDownList 模式會被忽略)
        AfxSetWindowText(hWndCtrl, value);
    }
}

使用時機

  • 非 DDX 情境下需存取 DropDown ComboBox 目前顯示文字。
  • 需程式化設定文字並自動匹配清單項目時。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved