關於 ComboBoxEx 控制件
ComboBoxEx 控制項是下拉式方塊控件,可提供項目圖片的原生支援。 若要輕鬆存取專案影像,控件會提供影像清單支援。 藉由使用此控制項,您可以提供組合框的功能,而不需要手動繪製項目圖像。
本主題包含下列各節。
- 建立 ComboBoxEx 控件
- ComboBoxEx 控件樣式
- ComboBoxEx 控件項目
- 回呼項目
- ComboBoxEx 控件影像清單
- 關於 ComboBoxEx 控件的通知訊息
- ComboBoxEx 控件訊息轉送
建立 ComboBoxEx 控制件
實際上,ComboBoxEx 控制項會建立子組合框,並根據指派的影像清單為您執行自行繪製的工作。 因此,CBS_OWNERDRAWFIXED 樣式是隱含的,而且在建立控件時不需要使用它。 因為影像清單是用來提供項目圖形,所以無法使用 CBS_OWNERDRAWVARIABLE 樣式。
ComboBoxEx 控件必須藉由呼叫 InitCommonControlsEx 函式來初始化,並在隨附 的 INITCOMMONCONTROLSEX 結構中指定ICC_USEREX_CLASSES。
您可以使用 CreateWindowEx 函式,並將 WC_COMBOBOXEX 指定為窗口類別,以建立 ComboBoxEx 控制件。 當呼叫 InitCommonControlsEx 函式時,就會註冊 類別,如上所述。
ComboBoxEx 控制件是在沒有預設影像清單的情況下建立的。 若要使用專案影像,您必須建立 ComboBoxEx 控件的影像清單,並使用 CBEM_SETIMAGELIST 訊息將它指派給控件。 如果您未將影像清單指派給 ComboBoxEx 控件,控件只會顯示項目文字。
ComboBoxEx 控件樣式
ComboBoxEx 控制件僅支援下列 ComboBox 樣式:
- CBS_SIMPLE
- CBS_DROPDOWN
- CBS_DROPDOWNLIST
- WS_CHILD
有幾個專門用於 ComboBoxEx 的擴充樣式 ComboBoxEx Control Extended Styles。
注意
在某些情況下,CBS_SIMPLE 樣式可能無法正常運作。
因為 ComboBoxEx 控制項會根據配置的影像清單自動執行自繪製任務,因此隱含 CBS_OWNERDRAWFIXED 樣式,建立控制項時,您不需要使用它。 因為影像清單是用來提供項目圖形,所以無法使用 CBS_OWNERDRAWVARIABLE 樣式。 ComboBoxEx 控件也支援 ComboBoxEx 控件擴充樣式,以提供其他功能。
ComboBoxEx 控制項目
ComboBoxEx 控件會使用 COMBOBOXEXITEM 結構來維護項目資訊。 此結構包含專案索引、影像索引(一般、選取狀態和重疊)、縮排值、文字字串和專案特定值的成員。
ComboBoxEx 控制項讓您可以透過訊息傳遞輕鬆存取和操作項目。 若要新增或刪除專案,請傳送 CBEM_INSERTITEM 或 CBEM_DELETEITEM 訊息。 您可以使用 CBEM_SETITEM 訊息,來修改目前控制項中的專案。
回呼項目
ComboBoxEx 控制項支援回呼項目屬性。 當您使用 CBEM_INSERTITEM將項目新增至控制項時,您可以將該項目指定為回呼項目。 當您將值指派給項目的 COMBOBOXEXITEM 結構時,您必須指定適當的回呼標誌值。 以下是 COMBOBOXEXITEM 結構成員及其對應的回呼旗標值。
成員 | 回呼值 |
---|---|
pszText | LPSTR_TEXTCALLBACK |
iImage | I_IMAGECALLBACK |
iSelectedImage | I_IMAGECALLBACK |
iOverlay | I_IMAGECALLBACK |
iIndent | I_INDENTCALLBACK |
控件會傳送 CBEN_GETDISPINFO 通知碼來要求回呼專案的相關信息。 此通知會以 WM_NOTIFY 訊息的形式傳送。 當您的應用程式處理此訊息時,它必須提供控制項的要求資訊。 如果您將隨附 COMBOBOXEXITEM 結構的 遮罩 成員設定為 CBEIF_DI_SETITEM,控制項會儲存項目資料,並且不會再次要求資料。
ComboBoxEx 控制件影像清單
如果您想要 ComboBoxEx 控制件顯示具有項目的圖示,則必須提供影像清單。 ComboBoxEx 控件最多支援一個專案的三個影像,一個用於其選取狀態、一個用於非選取狀態,另一個用於重疊影像。 使用 CBEM_SETIMAGELIST 訊息,將現有的映射清單指派給 ComboBoxEx 控件。
COMBOBOXEXITEM 結構包含元素,這些元素表示每個影像清單的影像索引值(已選取、未選取和重疊)。 針對每個項目,設定這些成員以顯示所需的影像。 不需要為每個影像類型指定影像索引。 您可以按照需要搭配使用影像類型的種類,但務必設定 COMBOBOXEXITEM 結構中的 遮罩 成員,以指示正在使用哪些成員。 控件會忽略尚未標示為有效的成員。
注意
如果您使用 CBS_SIMPLE 樣式,則不會顯示圖示。
關於 ComboBoxEx 控制件通知訊息
ComboBoxEx 控制件會傳送通知訊息來報告本身內的變更,或要求回呼項目資訊。 控件的父系會從 ComboBoxEx 控制件中包含的下拉式方塊接收所有 WM_COMMAND 訊息。 ComboBoxEx 控制件會使用 WM_NOTIFY 訊息傳送自己的通知。 因此,控件的擁有者必須準備好處理這兩種形式的通知訊息。
以下是透過 WM_NOTIFY 訊息傳送的 ComboBoxEx 特定通知碼。
通知 | 描述 |
---|---|
CBEN_BEGINEDIT | 表示用戶已啟動下拉式清單或在控件的編輯方塊中按一下。 |
CBEN_ENDEDIT | 表示使用者已從下拉式清單中選取專案,或已結束編輯方塊內的編輯作業。 |
CBEN_DELETEITEM | 報告某項目被刪除。 |
CBEN_GETDISPINFO | 要求項目屬性的相關資訊。 |
CBEN_INSERTITEM | 表示項目已插入控制件中。 |
ComboBoxEx 控件訊息轉送
以下是 ComboBoxEx 控件轉送至其子下拉式方塊的標準下拉式方塊訊息。 其中有些訊息可能是在轉送訊息之前或之後,由 ComboBoxEx 控件處理。
- CB_DELETESTRING
- CB_FINDSTRINGEXACT
- CB_GETCOUNT
- CB_GETCURSEL
- CB_GETDROPPEDCONTROLRECT
- CB_GETDROPPEDSTATE
- CB_GETITEMDATA
- CB_GETITEMHEIGHT
- CB_GETLBTEXT
- CB_GETLBTEXTLEN
- CB_GETEXTENDEDUI
- CB_LIMITTEXT
- CB_RESETCONTENT
- CB_SETCURSEL
- CB_SETDROPPEDWIDTH
- CB_SETEXTENDEDUI
- CB_SETITEMDATA
- CB_SETITEMHEIGHT
- CB_SHOWDROPDOWN
以下是 ComboBoxEx 控制件轉送至其父視窗的視窗訊息:
- WM_COMMAND (這包括所有CBN_通知。)
- WM_NOTIFY