共用方式為


關於 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_INSERTITEMCBEM_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 控件處理。

以下是 ComboBoxEx 控制件轉送至其父視窗的視窗訊息: