下拉式方塊功能
本文件討論下拉式方塊的功能。 如需詳細資訊,請參閱下列主題:
特殊功能
有特殊用途的訊息和函式可讓應用程式在下拉式方塊中顯示目錄清單、將數據與下拉式方塊中的清單專案產生關聯,以及變更下拉式下拉式方塊或下拉式清單框的鍵盤介面。
目錄清單
應用程式可以將檔案或子目錄的名稱新增至下拉式方塊,方法是將CB_DIR訊息傳送至該方塊。 此訊息的 wParam 參數會指定要新增之檔案的屬性,而 lParam 參數是定義檔案規格之文字字串的指標。
您可以使用 DlgDirListComboBox 函式來取代對話框中下拉式方塊的內容。 函式會以符合一組指定準則的磁碟驅動器、目錄和檔案名稱填滿下拉式方塊。 DlgDirSelectComboBoxEx 函式會擷取 DlgDirListComboBox 初始化下拉式方塊中的目前選取範圍。 這些函式可讓使用者從下拉式方塊中選取磁碟驅動器、目錄或檔案,而不需要輸入檔案的位置和名稱。
DlgDirListComboBox 和 DlgDirSelectComboBoxEx 函式和CB_DIR訊息類似於 DlgDirList 和 DlgDirSelectEx 函式,以及與列表框搭配使用的LB_DIR訊息。
與清單專案相關聯的數據
應用程式可以將數據與下拉式方塊中的清單專案產生關聯。 CB_SETITEMDATA訊息會將 DWORD 值與列表專案產生關聯,而CB_GETITEMDATA擷取與清單專案相關聯的值。
建立擁有者繪製下拉式方塊中的範例會使用項目數據,將常數與下拉式清單框中的每個專案產生關聯。 這類唯一值可識別與其排序位置無關的每個專案。
其他應用程式可能會使用項目數據,將句柄或指標與清單專案產生關聯。 如果是,應用程式可以在刪除清單項目時處理 WM_DELETEITEM 訊息,以刪除或釋放指定的物件。
擴充的使用者介面
下拉式下拉式方塊和下拉式清單框支援稱為擴充使用者介面的 替代鍵盤介面。 根據預設,F4 鍵會開啟或關閉清單,向下鍵會變更目前的選取範圍。 不過,在具有擴充使用者介面的下拉式方塊中,F4 鍵會停用,然後按向下鍵會開啟下拉式清單。 此外,通常捲動清單中的項目滑鼠滾輪在設定擴充 UI 時沒有任何函式。
若要選取下拉式方塊的使用者介面,應用程式可以將CB_SETEXTENDEDUI訊息傳送至下拉式方塊。 wParam 參數的 TRUE 值會啟用擴充的使用者介面;FALSE 值會設定預設的使用者介面。 若要判斷下拉式方塊是否使用擴充的使用者介面,應用程式可以將CB_GETEXTENDEDUI訊息傳送至下拉式方塊。
提示橫幅
提示橫幅是編輯控件和下拉式方塊的新功能。 提示橫幅的目的是要向使用者提供提示,以取得編輯控件或下拉式方塊的目的。 下列螢幕快照顯示具有提示文字 「Search」 的編輯控件。
當編輯控件沒有文字或下拉式方塊沒有選取範圍時,就會顯示提示橫幅的文字。 當使用者在編輯控件中輸入文字或選取下拉式方塊時,提示橫幅就會消失。 根據預設,當編輯控件或下拉式方塊收到焦點時,提示橫幅也會消失。
下拉式方塊通知
下拉式方塊中的訊息會以WM_COMMAND訊息的形式傳送為通知碼。 通知程式代碼會儲存在 wParam 參數的高字中,而應用程式可以處理下列下拉式方塊通知碼。
通知程序代碼 | 描述 |
---|---|
CBN_CLOSEUP | 指出下拉式下拉式方塊或下拉式清單框中的清單即將關閉。 |
CBN_DBLCLK | 表示使用者已在簡單的下拉式方塊中按兩下清單專案。 |
CBN_DROPDOWN | 指出下拉式下拉式方塊或下拉式清單框中的清單即將開啟。 |
CBN_EDITCHANGE | 表示使用者已變更簡單或下拉式下拉式方塊編輯控件中的文字。 此通知程式代碼會在顯示改變的文字之後傳送。 |
CBN_EDITUPDATE | 表示使用者已變更簡單或下拉式下拉式方塊編輯控件中的文字。 此通知程式代碼會在顯示改變的文字之前傳送。 |
CBN_ERRSPACE | 表示下拉式方塊無法配置足夠的記憶體來執行要求,例如新增清單專案。 |
CBN_KILLFOCUS | 表示下拉式方塊即將失去輸入焦點。 |
CBN_SELCHANGE | 表示目前的選取範圍已變更。 |
CBN_SELENDCANCEL | 表示應該忽略下拉式清單中所做的選取專案。 |
CBN_SELENDOK | 表示應該接受選取專案下拉式清單,但已卸除。 |
CBN_SETFOCUS | 表示下拉式方塊已收到輸入焦點。 |
默認下拉式方塊行為
下表描述預先定義 COMBOBOX 類別視窗程式特別處理的訊息。
訊息 | 描述 |
---|---|
CB_ADDSTRING | 將LB_ADDSTRING訊息傳送至清單視窗,以新增清單專案。 |
CB_DELETESTRING | 將LB_DELETESTRING訊息傳送至清單視窗,以刪除清單專案。 |
CB_DIR | 將符合指定屬性和路徑的檔案名新增至清單。 |
CB_FINDSTRING | 將LB_FINDSTRING訊息傳送至清單視窗。 此訊息會傳回以指定文字開頭之第一個清單專案的索引。 |
CB_FINDSTRINGEXACT | 將LB_FINDSTRING訊息傳送至清單視窗。 此訊息會傳回第一個清單專案的索引,完全符合指定的文字。 |
CB_GETCOUNT | 將LB_GETCOUNT訊息傳送至清單視窗。 它會傳回清單項目的數目。 |
CB_GETCURSEL | 將LB_GETCURSEL訊息傳送至清單視窗。 如果有的話,它會傳回目前選取專案的索引。 |
CB_GETDROPPEDCONTROLRECT | 以下拉式清單的螢幕座標填滿指定的矩形結構。 |
CB_GETDROPPEDSTATE | 如果下拉式清單已開啟,則會傳回 TRUE;否則會傳回 FALSE。 |
CB_GETDROPPEDWIDTH | 傳回下拉式清單的最小允許寬度,以像素為單位。 |
CB_GETEDITSEL | 將EM_GETSEL訊息傳送至編輯控件,並傳回目前選取範圍的開始和結束位置。 在下拉式清單中,視窗程式會傳回CB_ERR。 |
CB_GETEXTENDEDUI | 如果下拉式方塊是下拉式下拉式方塊或下拉式清單框,且已設定擴充使用者介面旗標,則傳回 TRUE;否則會傳回 FALSE。 |
CB_GETHORIZONTALEXTENT | 將LB_GETHORIZONTALEXTENT訊息傳送至清單視窗。 它會傳回下拉式清單的可卷動寬度,以像素為單位。 |
CB_GETITEMDATA | 將LB_GETITEMDATA訊息傳送至清單視窗。 它會傳回與指定清單項目相關聯的值。 |
CB_GETITEMHEIGHT | 將LB_GETITEMHEIGHT訊息傳送至清單視窗。 它會傳回指定之擁有者繪製清單專案的高度,以像素為單位。 |
CB_GETLBTEXT | 將LB_GETTEXT訊息傳送至清單視窗。 它會將指定的清單文字複製到指定的緩衝區。 |
CB_GETLBTEXTLEN | 將LB_GETTEXTLEN訊息傳送至清單視窗。 它會傳回指定清單文字的 TCHAR 長度。 |
CB_GETLOCALE | 將LB_GETLOCALE訊息傳送至清單視窗。 它會傳回清單的目前地區設定。 |
CB_GETMINVISIBLE | 取得下拉式方塊下拉式清單中的可見項目數目下限。 |
CB_GETTOPINDEX | 將LB_GETTOPINDEX訊息傳送至清單視窗。 它會傳回下拉式清單中第一個可見專案的索引。 |
CB_INITSTORAGE | 將LB_INITSTORAGE訊息傳送至清單視窗。 它會初始化指定項目數目的空間,以及專案字串的指定位元元組數目。 |
CB_INSERTSTRING | 將LB_INSERTSTRING訊息傳送至清單視窗。 它會在指定的位置插入清單專案。 |
CB_LIMITTEXT | 將EM_LIMITTEXT訊息傳送至編輯控制件。 它會設定用戶可以在編輯控制件中輸入的字元數上限。 在下拉式清單中,視窗程式會傳回CB_ERR。 |
CB_RESETCONTENT | 將LB_RESETCONTENT訊息傳送至清單視窗,並移除清單的內容。 |
CB_SELECTSTRING | 將LB_SELECTSTRING訊息傳送至清單視窗。 它會選取第一個清單專案,如果有的話,其開頭為指定文字中的字元。 |
CB_SETCURSEL | 將LB_SETCURSEL訊息傳送至清單視窗,並設定目前的選取範圍。 |
CB_SETDROPPEDWIDTH | 設定下拉式清單的最小允許寬度,以像素為單位。 |
CB_SETEDITSEL | 將EM_SETSEL訊息傳送至編輯控制件。 它會選取指定的文字範圍。 在下拉式清單中,視窗程式會傳回CB_ERR。 |
CB_SETEXTENDEDUI | 設定或清除擴充的使用者介面旗標。 此旗標會變更在下拉式下拉式方塊或下拉式清單框中開啟和關閉清單的索引鍵。 如果下拉式方塊是簡單的下拉式方塊,視窗程式會傳回CB_ERR。 |
CB_SETHORIZONTALEXTENT | 將LB_SETHORIZONTALEXTENT訊息傳送至清單視窗。 它會設定下拉式清單的可捲動寬度,以像素為單位。 |
CB_SETITEMDATA | 將LB_SETITEMDATA訊息傳送至清單視窗。 它會將指定的值與清單專案產生關聯。 |
CB_SETITEMHEIGHT | 將LB_SETITEMHEIGHT訊息傳送至清單視窗。 它會設定指定之擁有者繪製清單項目或選取欄位的高度。 |
CB_SETLOCALE | 將LB_SETLOCALE訊息傳送至清單視窗,並設定清單目前的地區設定。 如果清單具有CBS_SORT樣式,且使用 CB_ADDSTRING 新增字串,地區設定會影響清單的排序方式。 |
CB_SETMINVISIBLE | 設定下拉式方塊下拉式清單中的可見項目數目下限。 |
CB_SETTOPINDEX | 將LB_SETTOPINDEX訊息傳送至清單視窗。 它會捲動下拉式清單,讓指定的項目位於可見範圍的頂端。 |
CB_SHOWDROPDOWN | 顯示或隱藏下拉式清單。 此訊息不會影響簡單的下拉式方塊。 |
WM_CHAR | 處理字元輸入。 在下拉式清單中,此訊息會傳遞至清單視窗,將選取範圍移至以指定字元開頭的第一個專案。 在簡單且下拉式下拉式方塊中,此訊息會傳遞至編輯控件。 |
WM_CLEAR | 刪除編輯選取專案。 在簡單且下拉式下拉式方塊中,編輯控件會處理此訊息。 在下拉式清單中,視窗程式會傳回CB_ERR。 |
WM_COMMAND | 處理來自編輯控制項和清單視窗的通知訊息,並將對應的下拉式方塊通知碼傳送至父視窗。 |
針對編輯控制項通知,視窗程式可能會更新清單視窗目前的選取範圍、插入號索引和頂端索引。 針對清單通知訊息,視窗程式可能會更新選取範圍欄位的內容。 | |
WM_COMPAREITEM | 將訊息傳遞至父視窗,讓應用程式能夠指定兩個擁有者繪製清單項目的相對排序位置。 下拉式方塊視窗會從清單視窗接收此訊息。 |
WM_COPY | 將編輯選取專案複製到剪貼簿。 在簡單且下拉式下拉式方塊中,編輯控件會處理此訊息。 在下拉式清單中,視窗程式會傳回CB_ERR。 |
WM_CREATE | 初始化下拉式方塊。 |
WM_CUT | 刪除編輯選取專案,並將它放在剪貼簿上。 在簡單且下拉式下拉式方塊中,編輯控件會處理此訊息。 在下拉式清單中,視窗程式會傳回CB_ERR。 |
WM_DELETEITEM | 將訊息傳遞至父視窗,通知應用程式清單專案已刪除。 下拉式方塊視窗會從清單視窗接收此訊息。 |
WM_DRAWITEM | 將訊息傳遞給父視窗,讓應用程式能夠繪製指定的清單專案。 下拉式方塊視窗會從清單視窗接收此訊息。 視窗程式也可以產生此訊息,讓應用程式繪製下拉式清單框的選取字段。 |
WM_ENABLE | 設定要啟用或禁止滑鼠和鍵盤輸入的狀態。 |
WM_ERASEBKGND | 傳回 1,表示已清除背景。 |
WM_GETDLGCODE | 傳回DLG_WANTCHARS和DLGC_WANTARROWS值的組合。 |
WM_GETFONT | 傳回目前字型的句柄,下拉式方塊會用來繪製其文字。 |
WM_GETTEXT | 將選取範圍欄位的內容複製到指定的緩衝區。 在簡單且下拉式下拉式方塊中,編輯控件會處理此訊息。 |
WM_GETTEXTLENGTH | 傳回選取欄位中文字的長度,以字元為單位。 在簡單且下拉式下拉式方塊中,編輯控件會處理此訊息。 |
WM_KEYDOWN | 處理非字元鍵盤輸入。 在下拉式清單中,此訊息會傳送至清單視窗,此視窗可能會顯示或隱藏本身,或變更其目前的選取範圍或插入號索引。 在簡單且下拉式下拉式方塊中,此訊息會傳遞至編輯控件。 編輯控制項會將特定索引鍵傳遞至清單視窗,例如向上鍵和向下鍵和 F4 鍵。 |
WM_KILLFOCUS | 視需要隱藏選取欄位中的醒目提示,並關閉下拉式清單。 如果接收輸入焦點的視窗是下拉式方塊的一部分(例如編輯控件),則會忽略此訊息。 |
WM_LBUTTONDBLCLK | 與 WM_LBUTTONDOWN相同。 |
WM_LBUTTONDOWN | 將焦點設定為下拉式方塊,而下拉式下拉式方塊和下拉式清單可以開啟或關閉清單。 如果開啟清單,視窗程式會擷取滑鼠,藉由拖放滑鼠按鈕來啟用選取範圍。 |
WM_LBUTTONUP | 如果滑鼠開啟清單,則釋放滑鼠擷取。 |
WM_MEASUREITEM | 將訊息張貼至父視窗,讓應用程式能夠修改指定 MEASUREITEMSTRUCT 結構的內容。 下拉式方塊視窗會從清單視窗接收此訊息。 |
WM_MOUSEMOVE | 如果滑鼠已開啟清單,且滑鼠按鈕仍然關閉,請將訊息張貼至清單視窗。 這可讓用戶藉由將滑鼠指標拖曳至清單專案,然後放開按鈕來選取專案。 |
WM_NCCREATE | 配置下拉式方塊視窗程式所使用的內部數據結構。 |
WM_NCDESTROY | 釋放配置的資源以回應 WM_NCCREATE 訊息。 |
WM_PAINT | 小畫家 下拉式方塊的無效區域。 如果 wParam 不是 NULL,則會假設它是從子類別函式傳遞的裝置內容 (DC) 句柄。 視窗程式會使用指定的DC,而不是呼叫Begin 小畫家和 End 小畫家。 |
WM_PASTE | 將編輯選取專案取代為剪貼簿的內容。 在簡單且下拉式下拉式方塊中,編輯控件會處理此訊息。 在下拉式清單中,視窗程式會傳回CB_ERR。 |
WM_SETFOCUS | 將焦點設定為編輯控件,或在下拉式清單框中反轉選取欄位,並在清單視窗中開啟插入號。 |
WM_SETFONT | 將指定的字型控點儲存在內部結構中、調整選取範圍欄位和清單的維度,並使下拉式方塊視窗失效。 選取欄位中的文字,清單會顯示在儲存的字型中。 |
WM_SETREDRAW | 設定或清除重繪旗標。 如果清除重繪旗標,下拉式方塊不會重新繪製,直到再次設定旗標為止。 |
WM_SETTEXT | 設定編輯控制件的內容。 在簡單且下拉式下拉式方塊中,編輯控件會處理此訊息。 在下拉式清單中,視窗程式會傳回CB_ERR。 |
WM_SIZE | 視需要調整子視窗的大小。 |
WM_SYSKEYDOWN | 根據使用者按下的箭頭鍵,開啟或關閉下拉式清單。 |
所有其他訊息都會傳遞至 DefWindowProc 函式以進行默認處理。