關於 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 使用。
注意
在某些情況下,CBS_SIMPLE樣式可能無法正常運作。
因為 ComboBoxEx 控制件會根據指派的影像清單為您執行擁有者繪製工作, 所以會隱含CBS_OWNERDRAWFIXED 樣式;建立控件時不需要使用它。 因為影像清單是用來提供項目圖形, 所以無法使用CBS_OWNERDRAWVARIABLE 樣式。 ComboBoxEx 控制件也支援 提供其他功能的 ComboBoxEx 控件擴充樣式 。
ComboBoxEx 控制件專案
ComboBoxEx 控制件會使用 COMBOBOXEXITEM 結構來維護項目資訊。 此結構包含專案索引、影像索引(一般、選取狀態和重疊)、縮排值、文字字串和專案特定值的成員。
ComboBoxEx 控制項可讓您透過傳訊輕鬆存取和操作專案。 若要新增或刪除專案,請傳送CBEM_INSERTITEM或CBEM_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 控件處理。
- 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