Share via


關於 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 使用。

注意

在某些情況下,CBS_SIMPLE樣式可能無法正常運作。

 

因為 ComboBoxEx 控制件會根據指派的影像清單為您執行擁有者繪製工作, 所以會隱含CBS_OWNERDRAWFIXED 樣式;建立控件時不需要使用它。 因為影像清單是用來提供項目圖形, 所以無法使用CBS_OWNERDRAWVARIABLE 樣式。 ComboBoxEx 控制件也支援 提供其他功能的 ComboBoxEx 控件擴充樣式

ComboBoxEx 控制件專案

ComboBoxEx 控制件會使用 COMBOBOXEXITEM 結構來維護項目資訊。 此結構包含專案索引、影像索引(一般、選取狀態和重疊)、縮排值、文字字串和專案特定值的成員。

ComboBoxEx 控制項可讓您透過傳訊輕鬆存取和操作專案。 若要新增或刪除專案,請傳送CBEM_INSERTITEMCBEM_DELETEITEM訊息。 您可以使用 CBEM_SETITEM 訊息,修改控制件中目前的專案。

回呼專案

ComboBoxEx 控制項支援回呼項目屬性。 當您使用 CBEM_INSERTITEM 將專案新增至 控制項時,可以將專案指定為回呼專案。 當您將值指派給專案的 COMBOBOXEXITEM 結構時,您必須指定適當的回呼旗標值。 以下是 COMBOBOXEXITEM 結構成員及其對應的回呼旗標值。

member 回呼值
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 控制件轉送至其父視窗的視窗訊息:

  • WM_COMMAND (這包括所有CBN_通知。
  • WM_NOTIFY