Funkce pole se seznamem
Tento dokument popisuje funkce pole se seznamem. Další informace najdete v následujících tématech:
Speciální funkce
Existují speciální zprávy a funkce, které aplikaci umožňují zobrazit výpis adresáře v poli se seznamem, přidružit data k položkám seznamu v poli se seznamem a změnit rozhraní klávesnice pro rozevírací seznam nebo rozevírací seznam.
Seznamy adresářů
Aplikace může přidat názvy souborů nebo podadresářů do pole se seznamem odesláním CB_DIR zprávy. Parametr wParam pro tuto zprávu určuje atributy souborů, které se mají přidat, a parametr lParam je ukazatel na textový řetězec, který definuje specifikaci souboru.
K nahrazení obsahu pole se seznamem v dialogovém okně můžete použít funkci DlgDirListComboBox. Funkce vyplní pole se seznamem názvy jednotek, adresářů a souborů, které odpovídají zadané sadě kritérií. Funkce DlgDirSelectComboBoxEx načte aktuální výběr v poli se seznamem inicializovaným DlgDirListComboBox. Tyto funkce umožňují uživateli vybrat jednotku, adresář nebo soubor ze pole se seznamem bez zadání umístění a názvu souboru.
Funkce DlgDirListComboBox a DlgDirSelectComboBoxEx a zpráva CB_DIR jsou podobné funkcím DlgDirList a DlgDirSelectEx a LB_DIR zprávy použité se seznamovými poli.
Data přidružená k položkám seznamu
Aplikace může přidružit data k položkám seznamu v poli se seznamem. Zpráva CB_SETITEMDATA přidruží k položce seznamu hodnotu DWORD a CB_GETITEMDATA načte hodnotu přidruženou k položce seznamu.
Příklad v Vytvoření pole se seznamem vlastníka nakreslený používá data položek k přidružení konstanty ke každé položce v rozevíracím seznamu. Taková jedinečná hodnota identifikuje každou položku nezávisle na své seřazené pozici.
Jiné aplikace můžou použít data položek k přidružení úchytu nebo ukazatele k položce seznamu. Pokud ano, aplikace může zpracovat WM_DELETEITEM zprávu k odstranění nebo uvolnění zadaného objektu při odstranění položky seznamu.
Rozšířené uživatelské rozhraní
Rozevírací pole se seznamem a rozevírací seznamy podporují alternativní klávesové rozhraní označované jako rozšířené uživatelské rozhraní. Ve výchozím nastavení se klávesa F4 otevře nebo zavře seznam a šipka dolů změní aktuální výběr. V poli se seznamem s rozšířeným uživatelským rozhraním je však klávesa F4 zakázaná a stisknutím klávesy ŠIPKA DOLŮ se otevře rozevírací seznam. Kromě toho kolečko myši, které obvykle prochází položkami v seznamu, nemá při nastavení rozšířeného uživatelského rozhraní žádnou funkci.
Pokud chcete vybrat uživatelské rozhraní pole se seznamem, může aplikace odeslat CB_SETEXTENDEDUI zprávu do pole se seznamem. Hodnota TRUE parametru wParam umožňuje rozšířené uživatelské rozhraní; hodnota FALSE nastaví výchozí uživatelské rozhraní. Chcete-li zjistit, zda pole se seznamem používá rozšířené uživatelské rozhraní, může aplikace odeslat CB_GETEXTENDEDUI zprávu do pole se seznamem.
Informační nápisy
Informační nápisy jsou novou funkcí ovládacích prvků pro úpravy a polí se seznamem. Účelem informačního nápisu je poskytnout uživateli nápovědu k účelu ovládacího prvku pro úpravy nebo pole se seznamem. Následující snímek obrazovky ukazuje ovládací prvek pro úpravy s textem "Hledat".
Text banneru s upozorněním se zobrazí, když ovládací prvek pro úpravy nemá žádný text nebo pole se seznamem nemá žádný výběr. Když uživatel zadá text do ovládacího prvku pro úpravy nebo provede výběr do pole se seznamem, banner s upozorněním zmizí. Ve výchozím nastavení banner upozornění také zmizí, když ovládací prvek pro úpravy nebo pole se seznamem dostane fokus.
Oznámení pole se seznamem
Zprávy ze polí se seznamem se odesílají jako kódy oznámení ve formě WM_COMMAND zpráv. Kód oznámení je uložen ve vysokém slově wParam parametru a aplikace může zpracovat následující kódy oznámení pole se seznamem.
Kód oznámení | Popis |
---|---|
CBN_CLOSEUP | Označuje seznam v rozevíracím seznamu nebo rozevíracím seznamu, který se chystá zavřít. |
CBN_DBLCLK | Označuje, že uživatel poklikáním na položku seznamu v jednoduchém poli se seznamem. |
CBN_DROPDOWN | Označuje seznam v rozevíracím seznamu nebo rozevíracím seznamu, který se chystá otevřít. |
CBN_EDITCHANGE | Označuje, že uživatel změnil text v ovládacím prvku pro úpravy jednoduchého nebo rozevíracího seznamu se seznamem. Tento kód oznámení se odešle po zobrazení změněného textu. |
CBN_EDITUPDATE | Označuje, že uživatel změnil text v ovládacím prvku pro úpravy jednoduchého nebo rozevíracího seznamu se seznamem. Tento kód oznámení se odešle před zobrazením změněného textu. |
CBN_ERRSPACE | Označuje, že pole se seznamem nemůže přidělit dostatek paměti k provedení požadavku, například přidání položky seznamu. |
CBN_KILLFOCUS | Označuje, že pole se seznamem se chystá ztratit vstupní fokus. |
CBN_SELCHANGE | Označuje, že se aktuální výběr změnil. |
CBN_SELENDCANCEL | Označuje, že výběr provedený v rozevíracím seznamu, zatímco byl vyřazen, by měl být ignorován. |
CBN_SELENDOK | Označuje, že výběr rozevíracího seznamu, zatímco byl vyřazen, by měl být přijat. |
CBN_SETFOCUS | Označuje, že pole se seznamem obdrželo vstupní fokus. |
Výchozí chování pole se seznamem
Tato následující tabulka popisuje zprávy speciálně zpracovávané předdefinovanou procedurou okna třídy COMBOBOX.
Zpráva | Popis |
---|---|
CB_ADDSTRING | Odešle zprávu LB_ADDSTRING do okna seznamu a přidá položku seznamu. |
CB_DELETESTRING | Odešle zprávu LB_DELETESTRING do okna seznamu a odstraní položku seznamu. |
CB_DIR | Přidá názvy souborů odpovídající zadaným atributům a cestě k seznamu. |
CB_FINDSTRING | Odešle zprávu LB_FINDSTRING do okna seznamu. Tato zpráva vrátí index první položky seznamu, která začíná zadaným textem. |
CB_FINDSTRINGEXACT | Odešle zprávu LB_FINDSTRING do okna seznamu. Tato zpráva vrátí index první položky seznamu, která přesně odpovídá zadanému textu. |
CB_GETCOUNT | Odešle zprávu LB_GETCOUNT do okna seznamu. Vrátí počet položek seznamu. |
CB_GETCURSEL | Odešle zprávu LB_GETCURSEL do okna seznamu. Pokud existuje, vrátí index aktuálně vybrané položky. |
CB_GETDROPPEDCONTROLRECT | Vyplní zadanou strukturu obdélníku souřadnicemi obrazovky rozevíracího seznamu. |
CB_GETDROPPEDSTATE | Vrátí TRUE, pokud je otevřený rozevírací seznam; v opačném případě vrátí FALSE. |
CB_GETDROPPEDWIDTH | Vrátí minimální povolenou šířku v pixelech rozevíracího seznamu. |
CB_GETEDITSEL | Odešle EM_GETSEL zprávu do ovládacího prvku pro úpravy a vrátí počáteční a koncovou pozici aktuálního výběru. V rozevíracích seznamech vrátí procedura okna CB_ERR. |
CB_GETEXTENDEDUI | Vrátí TRUE pokud je pole se seznamem rozevírací seznam nebo rozevírací seznam a je nastaven příznak rozšířit uživatelské rozhraní; v opačném případě vrátí FALSE. |
CB_GETHORIZONTALEXTENT | Odešle zprávu LB_GETHORIZONTALEXTENT do okna seznamu. Vrátí posunovatelnou šířku v pixelech rozevíracího seznamu. |
CB_GETITEMDATA | Odešle zprávu LB_GETITEMDATA do okna seznamu. Vrátí hodnotu přidruženou k zadané položce seznamu. |
CB_GETITEMHEIGHT | Odešle zprávu LB_GETITEMHEIGHT do okna seznamu. Vrátí výšku zadané položky seznamu nakresleného vlastníkem v pixelech. |
CB_GETLBTEXT | Odešle zprávu LB_GETTEXT do okna seznamu. Zkopíruje zadaný text seznamu do zadané vyrovnávací paměti. |
CB_GETLBTEXTLEN | Odešle zprávu LB_GETTEXTLEN do okna seznamu. Vrátí délku zadaného textu seznamu v TCHARS. |
CB_GETLOCALE | Odešle zprávu LB_GETLOCALE do okna seznamu. Vrátí aktuální národní prostředí seznamu. |
CB_GETMINVISIBLE | Získá minimální počet viditelných položek v rozevíracím seznamu pole se seznamem. |
CB_GETTOPINDEX | Odešle zprávu LB_GETTOPINDEX do okna seznamu. Vrátí index první viditelné položky v rozevíracím seznamu. |
CB_INITSTORAGE | Odešle zprávu LB_INITSTORAGE do okna seznamu. Inicializuje mezeru pro zadaný počet položek a zadaný počet bajtů pro řetězce položek. |
CB_INSERTSTRING | Odešle zprávu LB_INSERTSTRING do okna seznamu. Vloží položku seznamu na zadanou pozici. |
CB_LIMITTEXT | Odešle EM_LIMITTEXT zprávu do ovládacího prvku pro úpravy. Nastaví maximální počet znaků, které může uživatel zadat do ovládacího prvku pro úpravy. V rozevíracích seznamech vrátí procedura okna CB_ERR. |
CB_RESETCONTENT | Odešle zprávu LB_RESETCONTENT do okna seznamu a odebere obsah seznamu. |
CB_SELECTSTRING | Odešle zprávu LB_SELECTSTRING do okna seznamu. Vybere první položku seznamu, pokud existuje, která začíná znaky v zadaném textu. |
CB_SETCURSEL | Odešle zprávu LB_SETCURSEL do okna seznamu a nastaví aktuální výběr. |
CB_SETDROPPEDWIDTH | Nastaví minimální povolenou šířku v pixelech rozevíracího seznamu. |
CB_SETEDITSEL | Odešle EM_SETSEL zprávu do ovládacího prvku pro úpravy. Vybere zadaný rozsah textu. V rozevíracích seznamech vrátí procedura okna CB_ERR. |
CB_SETEXTENDEDUI | Nastaví nebo vymaže příznak rozšířeného uživatelského rozhraní. Tento příznak změní klíče, které otevřete a zavřete seznam v rozevíracím seznamu nebo rozevíracím seznamu. Pokud je pole se seznamem jednoduché, vrátí procedura okna CB_ERR. |
CB_SETHORIZONTALEXTENT | Odešle zprávu LB_SETHORIZONTALEXTENT do okna seznamu. Nastaví posuvnou šířku v pixelech rozevíracího seznamu. |
CB_SETITEMDATA | Odešle zprávu LB_SETITEMDATA do okna seznamu. Přidruží zadanou hodnotu k položce seznamu. |
CB_SETITEMHEIGHT | Odešle zprávu LB_SETITEMHEIGHT do okna seznamu. Nastaví výšku zadané položky seznamu vytažené vlastníkem nebo pole výběru. |
CB_SETLOCALE | Odešle zprávu LB_SETLOCALE do okna seznamu a nastaví aktuální národní prostředí seznamu. Národní prostředí ovlivňuje způsob řazení seznamu, pokud má styl CBS_SORT a řetězce jsou přidány pomocí CB_ADDSTRING. |
CB_SETMINVISIBLE | Nastaví minimální počet viditelných položek v rozevíracím seznamu pole se seznamem. |
CB_SETTOPINDEX | Odešle zprávu LB_SETTOPINDEX do okna seznamu. Posune rozevírací seznam tak, aby zadaná položka byla v horní části viditelné oblasti. |
CB_SHOWDROPDOWN | Zobrazí nebo skryje rozevírací seznam. Tato zpráva nemá žádný vliv na jednoduchá pole se seznamem. |
WM_CHAR | Zpracovává vstup znaků. V rozevíracích seznamech se tato zpráva předá do okna seznamu, který přesune výběr na první položku začínající zadaným znakem. V jednoduchých a rozevíracích polích se seznamem se tato zpráva předá ovládacímu prvku pro úpravy. |
WM_CLEAR | Odstraní výběr úprav. V jednoduchých a rozevíracíchpolích V rozevíracích seznamech vrátí procedura okna CB_ERR. |
WM_COMMAND | Zpracovává zprávy oznámení z ovládacího prvku pro úpravy a okna seznamu a odesílá odpovídající kódy oznámení pole se seznamem do nadřazeného okna. |
U oznámení ovládacích prvků pro úpravy může procedura okna aktualizovat aktuální výběr okna seznamu, index kurzoru a horní index. U zpráv s oznámením seznamu může procedura okna aktualizovat obsah pole výběru. | |
WM_COMPAREITEM | Předá zprávu do nadřazeného okna a umožní aplikaci určit relativní pozici řazení dvou položek seznamu nakreslených vlastníkem. Okno se seznamem obdrží tuto zprávu z okna seznamu. |
WM_COPY | Zkopíruje výběr úprav do schránky. V jednoduchých a rozevíracíchpolích V rozevíracích seznamech vrátí procedura okna CB_ERR. |
WM_CREATE | Inicializuje pole se seznamem. |
WM_CUT | Odstraní výběr úprav a umístí ho do schránky. V jednoduchých a rozevíracíchpolích V rozevíracích seznamech vrátí procedura okna CB_ERR. |
WM_DELETEITEM | Předá zprávu do nadřazeného okna a oznámí aplikaci, že položka seznamu byla odstraněna. Okno se seznamem obdrží tuto zprávu z okna seznamu. |
WM_DRAWITEM | Předá zprávu do nadřazeného okna, které aplikaci umožní nakreslit zadanou položku seznamu. Okno se seznamem obdrží tuto zprávu z okna seznamu. Procedura okna může také pocházet z této zprávy, aby aplikace vykreslovala pole výběru rozevíracího seznamu. |
WM_ENABLE | Nastaví stav na povolení nebo zakázání vstupu myši a klávesnice. |
WM_ERASEBKGND | Vrátí hodnotu 1, která označuje, že pozadí je vymazáno. |
WM_GETDLGCODE | Vrátí kombinaci hodnot DLG_WANTCHARS a DLGC_WANTARROWS. |
WM_GETFONT | Vrátí úchyt k aktuálnímu písmu, pomocí kterého bude pole se seznamem kreslit jeho text. |
WM_GETTEXT | Zkopíruje obsah pole výběru do zadané vyrovnávací paměti. V jednoduchých a rozevíracíchpolích |
WM_GETTEXTLENGTH | Vrátí délku textu v poli výběru ve znaméně. V jednoduchých a rozevíracíchpolích |
WM_KEYDOWN | Zpracovává vstup klávesnice bez znaména. V rozevíracích seznamech se tato zpráva odešle do okna seznamu, které se může zobrazit nebo skrýt, nebo změnit aktuální výběr nebo kurzorový index. V jednoduchých a rozevíracích polích se seznamem se tato zpráva předá ovládacímu prvku pro úpravy. Ovládací prvek pro úpravy předává určité klávesy do okna seznamu, jako jsou klávesy ŠIPKA NAHORU a ŠIPKA DOLŮ a klávesa F4. |
WM_KILLFOCUS | Skryje zvýraznění v poli výběru a v případě potřeby zavře rozevírací seznam. Pokud je okno, které přijímá fokus vstupu, součástí pole se seznamem (například ovládací prvek pro úpravy), bude tato zpráva ignorována. |
WM_LBUTTONDBLCLK | Stejné jako WM_LBUTTONDOWN. |
WM_LBUTTONDOWN | Nastaví fokus na pole se seznamem a v rozevíracích seznamech a rozevíracích seznamech může seznam otevřít nebo zavřít. Pokud se otevře seznam, procedura okna zachytí myš a povolí výběr přetažením a uvolněním tlačítka myši. |
WM_LBUTTONUP | Uvolní zachytávání myši, pokud myš otevřela seznam. |
WM_MEASUREITEM | Publikuje zprávu do nadřazeného okna, což aplikaci umožňuje změnit obsah zadané MEASUREITEMSTRUCT struktury. Okno se seznamem obdrží tuto zprávu z okna seznamu. |
WM_MOUSEMOVE | Odešle zprávu do okna seznamu, pokud myš otevřela seznam a tlačítko myši je stále dole. To umožňuje uživateli vybrat položku přetažením ukazatele myši na položku seznamu a uvolněním tlačítka. |
WM_NCCREATE | Přidělí interní datovou strukturu používanou procedurou okna pole se seznamem. |
WM_NCDESTROY | Uvolní prostředky přidělené v reakci na zprávu WM_NCCREATE. |
WM_PAINT | Nakreslí neplatnou oblast pole se seznamem. Pokud wParam není null, předpokládá se, že se jedná o popisovač kontextu zařízení (DC) předaný z funkce podtřídy. Procedura okna používá místo volání BeginPaint a EndPaint. |
WM_PASTE | Nahradí výběr úprav obsahem schránky. V jednoduchých a rozevíracíchpolích V rozevíracích seznamech vrátí procedura okna CB_ERR. |
WM_SETFOCUS | Nastaví fokus na ovládací prvek pro úpravy nebo v rozevíracích seznamech invertuje pole výběru a zapne kurzor v okně seznamu. |
WM_SETFONT | Uloží zadaný úchyt písma v interní struktuře, upraví rozměry pole výběru a seznamu a zneplatní okno pole se seznamem. Text v poli výběru a v seznamu se zobrazí v uloženém písmu. |
WM_SETREDRAW | Nastaví nebo vymaže příznak překreslení. Pokud se příznak překreslení vymaže, pole se seznamem se nepřekreslí, dokud se příznak znovu nenastaví. |
WM_SETTEXT | Nastaví obsah ovládacího prvku pro úpravy. V jednoduchých a rozevíracíchpolích V rozevíracích seznamech vrátí procedura okna CB_ERR. |
WM_SIZE | V případě potřeby změní velikost podřízených oken. |
WM_SYSKEYDOWN | Otevře nebo zavře rozevírací seznam v závislosti na tom, kterou klávesu se šipkou uživatel stiskl. |
Všechny ostatní zprávy se předají funkciDefWindowProc pro výchozí zpracování.