Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés:
A Microsoft Foundation Classes (MFC) könyvtár továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.
A Windows-listamező funkcióit biztosítja.
Szemantika
class CListBox : public CWnd
Members
Nyilvános konstruktorok
| Név | Description |
|---|---|
CListBox::CListBox |
Objektumot CListBox hoz létre. |
Nyilvános metódusok
| Név | Description |
|---|---|
CListBox::AddString |
Sztringet ad hozzá egy listamezőhöz. |
CListBox::CharToItem |
Felülbírálás a sztringekkel nem rendelkező tulajdonos-rajz listamezők egyéni WM_CHAR kezelésének biztosításához. |
CListBox::CompareItem |
A keretrendszer meghívta egy új elem pozíciójának meghatározására egy rendezett tulajdonos-rajz listamezőben. |
CListBox::Create |
Létrehozza a Windows listamezőt, és csatolja az CListBox objektumhoz. |
CListBox::DeleteItem |
A keretrendszer meghívja, amikor a felhasználó töröl egy elemet egy tulajdonos-rajz listamezőből. |
CListBox::DeleteString |
Sztring törlése egy listamezőből. |
CListBox::Dir |
Fájlneveket, meghajtókat vagy mindkettőt ad hozzá az aktuális könyvtárból egy listamezőhöz. |
CListBox::DrawItem |
A keretrendszer meghívja, amikor megváltozik egy tulajdonos-rajz lista mezőjének vizuális aspektusa. |
CListBox::FindString |
Egy listamezőben keres egy sztringet. |
CListBox::FindStringExact |
Megkeresi a megadott sztringnek megfelelő első listamező-sztringet. |
CListBox::GetAnchorIndex |
Lekéri az aktuális horgonyelem nullaalapú indexét egy listamezőben. |
CListBox::GetCaretIndex |
Meghatározza annak az elemnek az indexét, amelynek a fókusz téglalapja egy többszörös kijelölésű listamezőben van. |
CListBox::GetCount |
A listamezőben lévő sztringek számát adja vissza. |
CListBox::GetCurSel |
A listamezőben jelenleg kijelölt sztring nulla alapú indexét adja vissza. |
CListBox::GetHorizontalExtent |
Azt a képpontszélességű szélességet adja vissza, amelyet egy listadoboz vízszintesen görgethet. |
CListBox::GetItemData |
A listaelemhez társított értéket adja vissza. |
CListBox::GetItemDataPtr |
Egy listaelemre mutató mutatót ad vissza. |
CListBox::GetItemHeight |
Meghatározza a listaelemek magasságát. |
CListBox::GetItemRect |
A listaelem határoló téglalapját adja vissza, ahogy az jelenleg látható. |
CListBox::GetListBoxInfo |
Lekéri az oszloponkénti elemek számát. |
CListBox::GetLocale |
Egy listamező területi azonosítójának lekérése. |
CListBox::GetSel |
Egy listaelem kijelölési állapotát adja vissza. |
CListBox::GetSelCount |
A többszörös kijelölésű listamezőben jelenleg kijelölt sztringek számát adja vissza. |
CListBox::GetSelItems |
A listamezőben jelenleg kijelölt sztringek indexeit adja vissza. |
CListBox::GetText |
Listaelem másolása pufferbe. |
CListBox::GetTextLen |
Egy listaelem bájtban megadott hosszát adja vissza. |
CListBox::GetTopIndex |
A listamező első látható sztringjének indexét adja vissza. |
CListBox::InitStorage |
Előre áthelyezi a listaelemek és sztringek memóriablokkjait. |
CListBox::InsertString |
Sztring beszúrása egy adott helyre egy listamezőben. |
CListBox::ItemFromPoint |
Egy ponthoz legközelebbi listaelem indexét adja vissza. |
CListBox::MeasureItem |
A keretrendszer meghívja, amikor létrejön egy tulajdonos-rajz listamező a listamező dimenzióinak meghatározásához. |
CListBox::ResetContent |
Törli az összes bejegyzést egy listamezőből. |
CListBox::SelectString |
Egy sztringet keres és jelöl ki egy kijelölési listában. |
CListBox::SelItemRange |
Sztringtartomány kijelölése vagy jelölésének törlése egy többszörös kijelölésű listamezőben. |
CListBox::SetAnchorIndex |
Ha a horgonyt egy többszörös kijelölési listamezőben állítja be, azzal megkezdheti a bővített kijelölést. |
CListBox::SetCaretIndex |
A fókusz téglalapot a megadott index elemére állítja be egy többszörös kijelölési listamezőben. |
CListBox::SetColumnWidth |
Többoszlopos listamező oszlopszélessége. |
CListBox::SetCurSel |
Kiválaszt egy listamező-sztringet. |
CListBox::SetHorizontalExtent |
A listamező vízszintesen görgethető szélességét képpontban állítja be. |
CListBox::SetItemData |
Beállítja a listaelemhez társított értéket. |
CListBox::SetItemDataPtr |
A listaelemre mutató mutatót állít be. |
CListBox::SetItemHeight |
A listamező elemeinek magasságát állítja be. |
CListBox::SetLocale |
Egy listamező területi azonosítójának beállítása. |
CListBox::SetSel |
Kijelöl vagy töröl egy listaelemet egy többszörös kijelölésű listamezőben. |
CListBox::SetTabStops |
A tabulátorpozíciók beállítása egy listamezőben. |
CListBox::SetTopIndex |
Beállítja a listamező első látható sztringjének nullaalapú indexét. |
CListBox::VKeyToItem |
Felülbírálás a stíluskészlettel rendelkező listamezők egyéni WM_KEYDOWN kezelésének LBS_WANTKEYBOARDINPUT biztosításához. |
Megjegyzések
A listamezők olyan elemek listáját jelenítik meg, mint például a fájlnevek, amelyeket a felhasználó megtekinthet és kiválaszthat.
Egy kijelölési listában a felhasználó csak egy elemet jelölhet ki. Több kijelölési lista listában kijelölhet egy elemtartományt. Amikor a felhasználó kijelöl egy elemet, az ki lesz emelve, és a listamező értesítést küld a szülőablaknak.
Listamezőt párbeszédpanelsablonból vagy közvetlenül a kódból is létrehozhat. Ha közvetlenül szeretné létrehozni, hozza létre az CListBox objektumot, majd hívja meg a Create tagfüggvényt a Windows listamező vezérlőelem létrehozásához és az CListBox objektumhoz való csatolásához. Ha listamezőt szeretne használni egy párbeszédpanelsablonban, deklaráljon egy listamezőváltozót a párbeszédpanel-osztályban, majd használja DDX_Control a párbeszédpanel-osztály függvényében DoDataExchange a tagváltozót a vezérlőhöz való csatlakoztatásához. (ez automatikusan megtörténik, ha vezérlőváltozót ad hozzá a párbeszédpanel-osztályhoz.)
Az építés egy egylépéses folyamat lehet egy osztályban, amely a következőből CListBoxszármazik: . Írjon konstruktort a származtatott osztályhoz, és hívja meg Create a konstruktoron belülről.
Ha egy listamező által a szülőnek küldött Windows-értesítési üzeneteket szeretné kezelni (általában egy osztályból CDialogszármazik), adjon hozzá egy üzenettérkép-bejegyzést és egy üzenetkezelő tagfüggvényt a szülőosztályhoz minden egyes üzenethez.
Minden üzenettérkép-bejegyzés a következő formában történik:
ON_Notification( id, memberFxn )
ahol id megadja az értesítést küldő listamező vezérlőelem gyermekablak-azonosítóját, és memberFxn az értesítés kezeléséhez írt szülőtagfüggvény neve.
A szülő függvény prototípusa a következő:
afx_msg void memberFxn( );
Az alábbiakban felsoroljuk a lehetséges üzenettérkép-bejegyzéseket, valamint azoknak az eseteknek a leírását, amelyekben a rendszer elküldi őket a szülőnek:
ON_LBN_DBLCLKA felhasználó duplán kattint egy sztringre egy listamezőben. Ezt az értesítési üzenetet csak a stílussalLBS_NOTIFYrendelkező listamező küldi el.ON_LBN_ERRSPACEA listamező nem tud elegendő memóriát lefoglalni a kérés teljesítéséhez.ON_LBN_KILLFOCUSA listamező elveszíti a bemeneti fókuszt.ON_LBN_SELCANCELAz aktuális listakijelölés megszakadt. Ezt az üzenetet csak akkor küldi el a rendszer, ha egy listamező stílussal rendelkezikLBS_NOTIFY.ON_LBN_SELCHANGEA lista kijelölése megváltozott. Ez az értesítés nem lesz elküldve, ha a tagfüggvény módosítja a kijelöléstCListBox::SetCurSel. Ez az értesítés csak a stílussal rendelkezőLBS_NOTIFYlistamezőkre vonatkozik. ALBN_SELCHANGErendszer akkor is elküldi az értesítési üzenetet egy többszörös kijelölésű listamezőhöz, amikor a felhasználó lenyom egy nyílbillentyűt, még akkor is, ha a kijelölés nem változik.ON_LBN_SETFOCUSA listamező a bemeneti fókuszt kapja.ON_WM_CHARTOITEMA sztringeket nem tartalmazó tulajdonosi rajzok listája üzenetbenWM_CHARérkezik.ON_WM_VKEYTOITEMA stílust tartalmazóLBS_WANTKEYBOARDINPUTlista egy üzenetet kapWM_KEYDOWN.
Ha egy párbeszédpanelen (egy párbeszédpanel-erőforráson keresztül) hoz létre CListBox objektumot, a rendszer automatikusan megsemmisíti az CListBox objektumot, amikor a felhasználó bezárja a párbeszédpanelt.
Ha objektumot hoz létre egy CListBox ablakban, előfordulhat, hogy el kell pusztítania az CListBox objektumot. Ha létrehozza az CListBox objektumot a veremen, az automatikusan megsemmisül. Ha a függvény használatával hozza létre az CListBox objektumot a new halomon, a szülőablak bezárásakor meg kell hívnia delete az objektumot, hogy semmisítse meg.
Ha bármilyen memóriát lefoglal az CListBox objektumban, felülbírálja a CListBox destruktort a foglalás törléséhez.
Öröklési hierarchia
CListBox
Requirements
Fejléc:afxwin.h
CListBox::AddString
Sztringet ad hozzá egy listamezőhöz.
int AddString(LPCTSTR lpszItem);
Paraméterek
lpszItem
A hozzáadni kívánt null értékű sztringre mutat.
Visszaadott érték
A listamező sztringjének nulla alapú indexe. A visszatérési érték az, LB_ERR ha hiba történik; a visszatérési érték az, LB_ERRSPACE ha nincs elegendő hely az új sztring tárolásához.
Megjegyzések
Ha a listamező nem a LBS_SORT stílussal lett létrehozva, a sztring a lista végére kerül. Ellenkező esetben a sztring be lesz szúrva a listába, és a lista rendezve lesz. Ha a listamező a LBS_SORT stílussal lett létrehozva, de nem a LBS_HASSTRINGS stílussal, a keretrendszer a tagfüggvény egy vagy több hívása alapján rendezi a CompareItem listát.
Sztring InsertString beszúrása egy adott helyre a listamezőben.
Example
// Add 10 items to the list box.
CString str;
for (int i = 0; i < 10; i++)
{
str.Format(_T("item string %d"), i);
m_myListBox.AddString(str);
}
CListBox::CharToItem
A keretrendszer meghívja, amikor a listamező szülőablaka üzenetet kap WM_CHARTOITEM a listamezőből.
virtual int CharToItem(
UINT nKey,
UINT nIndex);
Paraméterek
nKey
A felhasználó által beírt karakter ANSI-kódja.
nIndex
A listadoboz-ápoló aktuális pozíciója.
Visszaadott érték
Az - 1 vagy - 2 értéket adja vissza, ha nincs további művelet, vagy nem nem megfelelő számot ad meg egy listaelem indexének megadásához, amelyen az alapértelmezett műveletet hajtja végre a billentyűleütéshez. Az alapértelmezett implementáció eredménye – 1.
Megjegyzések
Az WM_CHARTOITEM üzenetet a listamező küldi el, amikor üzenetet kap WM_CHAR , de csak akkor, ha a listamező megfelel az összes feltételnek:
Egy tulajdonos-rajz lista mező.
Nincs megadva a
LBS_HASSTRINGSstíluskészlet.Legalább egy elemből áll.
Ezt a függvényt soha ne nevezd magadnak. Bírálja felül ezt a függvényt, hogy saját egyénileg kezelje a billentyűzetüzeneteket.
A felülbírálás során egy értéket kell visszaadnia, amelyből megtudhatja a keretrendszernek, hogy milyen műveletet hajtott végre. Az - 1 vagy - 2 visszatérési érték azt jelzi, hogy ön kezelte az elem kiválasztásának minden aspektusát, és nem igényel további műveletet a listamezőben. Az - 1 vagy - 2 visszatérés előtt beállíthatja a kijelölést, vagy áthelyezheti a gondozót vagy mindkettőt. A kijelölés beállításához használja SetCurSel vagy SetSel. A gondviselet áthelyezéséhez használja SetCaretIndexa következőt: .
A 0 vagy annál nagyobb visszatérési érték megadja a listamező egyik elemének indexét, és azt jelzi, hogy a listamezőnek az adott elem billentyűleütéséhez az alapértelmezett műveletet kell végrehajtania.
Example
// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example moves the caret down one item on a numeric key and up one item
// on an alphabetic key. The list box control was created with the
// following code:
// m_myODListBox.Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
// CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
int CMyODListBox::CharToItem(UINT nChar, UINT nIndex)
{
// On a numeric key, move the caret up one item.
if (isdigit(nChar) && (nIndex > 0))
{
SetCaretIndex(nIndex - 1);
}
// On an alphabetic key, move the caret down one item.
else if (isalpha(nChar) && (nIndex < (UINT)GetCount()))
{
SetCaretIndex(nIndex + 1);
}
// Do not perform any default processing.
return -1;
}
CListBox::CListBox
Objektumot CListBox hoz létre.
CListBox();
Megjegyzések
Egy objektumot CListBox két lépésben hozhat létre. Először hívja meg a konstruktort ClistBox , majd hívja meg Create, amely inicializálja a Windows listamezőt, és csatolja azt a CListBox.
Example
// Declare a local CListBox object.
CListBox myListBox;
// Declare a dynamic CListBox object.
CListBox *pmyListBox = new CListBox;
CListBox::CompareItem
A keretrendszer meghívta egy új elem relatív pozíciójának meghatározására egy rendezett tulajdonos-rajz listamezőben.
virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);
Paraméterek
lpCompareItemStruct
Hosszú mutató egy COMPAREITEMSTRUCT szerkezetre.
Visszaadott érték
A szerkezetben leírt két elem relatív pozícióját COMPAREITEMSTRUCT jelzi. Az alábbi értékek bármelyike lehet:
| Érték | Meaning |
|---|---|
| -1 | Az 1. elem rendezi a 2. elemet. |
| 0 | Az 1. és a 2. elem ugyanúgy rendezi a elemet. |
| 1 | Az 1. elem a 2. elem után rendez. |
Tekintse meg CWnd::OnCompareItem a COMPAREITEMSTRUCT szerkezet leírását.
Megjegyzések
Alapértelmezés szerint ez a tagfüggvény nem tesz semmit. Ha létrehoz egy tulajdonos-rajz listamezőt a stílussal, felül kell bírálnia ezt a LBS_SORT tagfüggvényt, hogy segítse a keretrendszert a listamezőhöz hozzáadott új elemek rendezésében.
Example
// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example compares two items using _tcscmp to sort items in reverse
// alphabetical order. The list box control was created with the
// following code:
// m_myODListBox.Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
// CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
int CMyODListBox::CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct)
{
ASSERT(lpCompareItemStruct->CtlType == ODT_LISTBOX);
LPCTSTR lpszText1 = (LPCTSTR)lpCompareItemStruct->itemData1;
ASSERT(lpszText1 != NULL);
LPCTSTR lpszText2 = (LPCTSTR)lpCompareItemStruct->itemData2;
ASSERT(lpszText2 != NULL);
return _tcscmp(lpszText2, lpszText1);
}
CListBox::Create
Létrehozza a Windows listamezőt, és csatolja az CListBox objektumhoz.
virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID);
Paraméterek
dwStyle
A listamező stílusát adja meg.
Listastílusok bármilyen kombinációját alkalmazhatja a dobozra.
rect
Megadja a lista méretét és pozícióját.
CRect Lehet objektum vagy RECT struktúra.
pParentWnd
Megadja a listamező szülőablakát (általában egy objektumot CDialog ). Nem lehet NULL.
nID
A listamező vezérlőazonosítóját adja meg.
Visszaadott érték
Nonzero, ha sikeres; egyéb esetben 0.
Megjegyzések
Egy objektumot CListBox két lépésben hozhat létre. Először hívja meg a konstruktort, majd hívja meg Create, amely inicializálja a Windows listamezőt, és csatolja az CListBox objektumhoz.
A végrehajtáskor Create a Windows elküldi a WM_NCCREATE, WM_CREATE, WM_NCCALCSIZEés WM_GETMINMAXINFO az üzeneteket a listavezérlőnek.
Ezeket az üzeneteket alapértelmezés szerint az OnNcCreatealaposztály , OnCreate, OnNcCalcSizeés OnGetMinMaxInfo tagfüggvényei CWnd kezelik. Az alapértelmezett üzenetkezelés kibővítéséhez származtassunk egy osztályt CListBox, adjunk hozzá egy üzenettérképet az új osztályhoz, és felülbíráljuk az előző üzenetkezelő tagfüggvényeket. Felülbírálhatja OnCreatepéldául egy új osztály szükséges inicializálását.
Alkalmazza a következő ablakstílusokat egy listamező vezérlőelemre.
WS_CHILDMindigWS_VISIBLEÁltalábanWS_DISABLEDRitkánWS_VSCROLLFüggőleges görgetősáv hozzáadásaWS_HSCROLLVízszintes görgetősáv hozzáadásaWS_GROUPVezérlőelemek csoportosításaWS_TABSTOPA vezérlőelemhez való lapozás engedélyezése
Example
// pParentWnd is a pointer to the parent window.
m_myListBox.Create(WS_CHILD | WS_VISIBLE | LBS_STANDARD | WS_HSCROLL,
CRect(10, 10, 200, 200), pParentWnd, IDC_MYLISTBOX);
CListBox::DeleteItem
A keretrendszer meghívja, amikor a felhasználó töröl egy elemet egy tulajdonos-rajz CListBox objektumból, vagy megsemmisíti a listamezőt.
virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);
Paraméterek
lpDeleteItemStruct
Hosszú mutató egy Windows-struktúra DELETEITEMSTRUCT felé, amely a törölt elem adatait tartalmazza.
Megjegyzések
A függvény alapértelmezett implementációja nem végez semmit. Felülbírálhatja ezt a függvényt, ha szükség szerint újrarajzol egy tulajdonosi listamezőt.
Tekintse meg CWnd::OnDeleteItem a DELETEITEMSTRUCT szerkezet leírását.
Example
// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example simply frees the item's text. The list box control was created
// with the following code:
// m_myODListBox.Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
// CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
void CMyODListBox::DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct)
{
ASSERT(lpDeleteItemStruct->CtlType == ODT_LISTBOX);
LPVOID lpszText = (LPVOID)lpDeleteItemStruct->itemData;
ASSERT(lpszText != NULL);
free(lpszText);
CListBox::DeleteItem(lpDeleteItemStruct);
}
CListBox::DeleteString
Törli a listamezőből a pozícióban nIndex lévő elemet.
int DeleteString(UINT nIndex);
Paraméterek
nIndex
A törölni kívánt sztring nulla alapú indexét adja meg.
Visszaadott érték
A listában fennmaradó sztringek száma. A visszatérési érték az, LB_ERR ha nIndex a lista elemeinek számánál nagyobb indexet ad meg.
Megjegyzések
Az alábbi nIndex elemek mostantól egy pozícióval lejjebb lépnek. Ha például egy listamező két elemet tartalmaz, az első elem törlése miatt a fennmaradó elem most az első helyen lesz.
nIndex=0 az első pozícióban lévő elemhez.
Example
// Delete every other item from the list box.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.DeleteString(i);
}
CListBox::Dir
Fájlnevek, meghajtók vagy mindkettő listáját adja hozzá a listamezőhöz.
int Dir(
UINT attr,
LPCTSTR lpszWildCard);
Paraméterek
attr
Az alábbi értékek enumbármely kombinációjaCFile::GetStatus, vagy a következő értékek bármely kombinációja lehet:
| Érték | Meaning |
|---|---|
| 0x0000 | A fájl olvasható vagy írható. |
| 0x0001 | A fájl olvasható, de nem írható bele. |
| 0x0002 | A fájl rejtett, és nem jelenik meg a címtárlistában. |
| 0x0004 | A fájl egy rendszerfájl. |
| 0x0010 | A megadott lpszWildCard név egy könyvtárat ad meg. |
| 0x0020 | A fájl archiválva lett. |
| 0x4000 | Adja meg az összes olyan meghajtót, amely megfelel a megadott névnek lpszWildCard. |
| 0x8000 | Exkluzív zászló. Ha a kizárólagos jelző be van állítva, csak a megadott típusú fájlok jelennek meg a listában. Ellenkező esetben a megadott típusú fájlok a "normál" fájlok mellett jelennek meg. |
lpszWildCard
Egy fájlspecifikációs sztringre mutat. A sztring tartalmazhat helyettesítő karaktereket (például *.*).
Visszaadott érték
A listához hozzáadott utolsó fájlnév nullaalapú indexe. A visszatérési érték az, LB_ERR ha hiba történik; a visszatérési érték az, LB_ERRSPACE ha nincs elegendő hely az új sztringek tárolásához.
Example
// Add all the files and directories in the windows directory.
TCHAR lpszWinPath[MAX_PATH], lpszOldPath[MAX_PATH];
::GetWindowsDirectory(lpszWinPath, MAX_PATH);
::GetCurrentDirectory(MAX_PATH, lpszOldPath);
::SetCurrentDirectory(lpszWinPath);
m_myListBox.ResetContent();
m_myListBox.Dir(DDL_READWRITE | DDL_DIRECTORY, _T("*.*"));
::SetCurrentDirectory(lpszOldPath);
CListBox::DrawItem
A keretrendszer meghívja, amikor megváltozik egy tulajdonos-rajz lista mezőjének vizuális aspektusa.
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
Paraméterek
lpDrawItemStruct
Hosszú mutató egy DRAWITEMSTRUCT olyan struktúrára, amely a szükséges rajztípussal kapcsolatos információkat tartalmazza.
Megjegyzések
A itemAction struktúra tagjai határozzák itemStateDRAWITEMSTRUCT meg a végrehajtandó rajzműveletet.
Alapértelmezés szerint ez a tagfüggvény nem tesz semmit. A tagfüggvény felülbírálása egy tulajdonosi rajzobjektum CListBox rajzának implementálásához. Az alkalmazásnak vissza kell állítania az összes grafikus eszközillesztő (GDI) objektumot, amely a tagfüggvény leállása előtt megadott megjelenítési környezethez lpDrawItemStruct van kiválasztva.
Tekintse meg CWnd::OnDrawItem a DRAWITEMSTRUCT szerkezet leírását.
Example
// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example draws an item's text centered vertically and horizontally. The
// list box control was created with the following code:
// m_myODListBox.Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
// CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
void CMyODListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
ASSERT(lpDrawItemStruct->CtlType == ODT_LISTBOX);
LPCTSTR lpszText = (LPCTSTR)lpDrawItemStruct->itemData;
ASSERT(lpszText != NULL);
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
// Save these value to restore them when done drawing.
COLORREF crOldTextColor = dc.GetTextColor();
COLORREF crOldBkColor = dc.GetBkColor();
// If this item is selected, set the background color
// and the text color to appropriate values. Also, erase
// rect by filling it with the background color.
if ((lpDrawItemStruct->itemAction | ODA_SELECT) &&
(lpDrawItemStruct->itemState & ODS_SELECTED))
{
dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
dc.SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
dc.FillSolidRect(&lpDrawItemStruct->rcItem,
::GetSysColor(COLOR_HIGHLIGHT));
}
else
{
dc.FillSolidRect(&lpDrawItemStruct->rcItem, crOldBkColor);
}
// If this item has the focus, draw a red frame around the
// item's rect.
if ((lpDrawItemStruct->itemAction | ODA_FOCUS) &&
(lpDrawItemStruct->itemState & ODS_FOCUS))
{
CBrush br(RGB(255, 0, 0));
dc.FrameRect(&lpDrawItemStruct->rcItem, &br);
}
// Draw the text.
dc.DrawText(
lpszText,
(int)_tcslen(lpszText),
&lpDrawItemStruct->rcItem,
DT_CENTER | DT_SINGLELINE | DT_VCENTER);
// Reset the background color and the text color back to their
// original values.
dc.SetTextColor(crOldTextColor);
dc.SetBkColor(crOldBkColor);
dc.Detach();
}
CListBox::FindString
Megkeresi a megadott előtagot tartalmazó listamező első sztringét anélkül, hogy módosítaná a listamező kijelölését.
int FindString(
int nStartAfter,
LPCTSTR lpszItem) const;
Paraméterek
nStartAfter
Az elem nulla alapú indexét tartalmazza az első keresendő elem előtt. Amikor a keresés eléri a listamező alját, a listamező tetejétől a megadott nStartAfterelemig folytatódik. Ha nStartAfter -1, a teljes listamező az elejétől kezdve keresve lesz.
lpszItem
A keresendő előtagot tartalmazó null értékű sztringre mutat. A keresés a kis- és nagybetűk függetlenek, ezért ez a sztring tartalmazhat nagybetűk és kisbetűk tetszőleges kombinációját.
Visszaadott érték
Az egyező elem nulla alapú indexe, vagy LB_ERR ha a keresés sikertelen volt.
Megjegyzések
SelectString A tagfüggvény használatával megkereshet és kijelölhet egy sztringet.
Example
// The string to match.
LPCTSTR lpszmyString = _T("item");
// Delete all items that begin with the specified string.
int nIndex = 0;
while ((nIndex = m_myListBox.FindString(nIndex, lpszmyString)) != LB_ERR)
{
m_myListBox.DeleteString(nIndex);
}
CListBox::FindStringExact
Megkeresi az első listamező sztringet, amely megfelel a megadott sztringnek lpszFind.
int FindStringExact(
int nIndexStart,
LPCTSTR lpszFind) const;
Paraméterek
nIndexStart
Az elem nulla alapú indexét adja meg az első keresendő elem előtt. Amikor a keresés eléri a listamező alját, a listamező tetejétől a megadott nIndexStartelemig folytatódik. Ha nIndexStart -1, a teljes listamező az elejétől kezdve keresve lesz.
lpszFind
A kereséshez a null értékű sztringre mutat. Ez a sztring teljes fájlnevet tartalmazhat, beleértve a bővítményt is. A keresés nem megkülönbözteti a kis- és nagybetűket, ezért a sztring tartalmazhat nagybetűk és kisbetűk bármilyen kombinációját.
Visszaadott érték
Az egyező elem indexe, vagy LB_ERR ha a keresés sikertelen volt.
Megjegyzések
Ha a listamező tulajdonos-rajz stílussal lett létrehozva, de a LBS_HASSTRINGS stílus nélkül, a FindStringExact tagfüggvény megpróbálja a duplaszó értékét az értékével lpszFindegyezni.
Example
// The string to match.
LPCTSTR lpszmyString = _T("item string 3");
// Delete all items that exactly match the specified string.
int nIndex = 0;
while ((nIndex = m_myListBox.FindStringExact(nIndex, lpszmyString)) != LB_ERR)
{
m_myListBox.DeleteString(nIndex);
}
CListBox::GetAnchorIndex
A listamező aktuális horgonyelemének nullaalapú indexét kéri le.
int GetAnchorIndex() const;
Visszaadott érték
Az aktuális horgonyelem indexe, ha sikeres; egyéb esetben LB_ERR.
Megjegyzések
Több kijelölésű listamezőben a horgonyelem az egybefüggő kijelölt elemek blokkjának első vagy utolsó eleme.
Example
Lásd a példát.CListBox::SetAnchorIndex
CListBox::GetCaretIndex
Meghatározza annak az elemnek az indexét, amelynek a fókusz téglalapja egy többszörös kijelölésű listamezőben van.
int GetCaretIndex() const;
Visszaadott érték
Annak az elemnek a nullaalapú indexe, amelynek a fókusz téglalapja egy listamezőben található. Ha a listamező egy kijelölési lista, a visszatérési érték a kijelölt elem indexe, ha van ilyen.
Megjegyzések
Előfordulhat, hogy az elem ki van jelölve.
Example
Lásd a példát.CListBox::SetCaretIndex
CListBox::GetCount
A listamező elemeinek számát kéri le.
int GetCount() const;
Visszaadott érték
A listamező elemeinek száma, vagy LB_ERR hiba esetén.
Megjegyzések
A visszaadott szám egy nagyobb, mint az utolsó elem indexértéke (az index nulla alapú).
Example
// Add 10 items to the list box.
CString str;
for (int i = 0; i < 10; i++)
{
str.Format(_T("item %d"), i);
m_myListBox.AddString(str);
}
// Verify that 10 items were added to the list box.
ASSERT(m_myListBox.GetCount() == 10);
CListBox::GetCurSel
Lekéri az aktuálisan kijelölt elem nullaalapú indexét( ha van ilyen), egy kijelölési listamezőben.
int GetCurSel() const;
Visszaadott érték
Az aktuálisan kijelölt elem nulla alapú indexe, ha egy kijelölési listamezőről van szó.
LB_ERR Ha jelenleg nincs elem kijelölve.
Egy többszörös kijelölési listamezőben annak az elemnek az indexe, amely a fókuszt tartalmazza.
Megjegyzések
Ne hívja meg GetCurSel a többszörös kijelölésű listamezőt. A CListBox::GetSelItems használható helyette.
Example
// Select the next item of the currently selected one.
int nIndex = m_myListBox.GetCurSel();
int nCount = m_myListBox.GetCount();
if ((nIndex != LB_ERR) && (nCount > 1))
{
if (++nIndex < nCount)
m_myListBox.SetCurSel(nIndex);
else
m_myListBox.SetCurSel(0);
}
CListBox::GetHorizontalExtent
A listamezőből lekéri a képpontokban kifejezett szélességet, amellyel vízszintesen görgethető.
int GetHorizontalExtent() const;
Visszaadott érték
A listadoboz görgethető szélessége képpontban.
Megjegyzések
Ez csak akkor alkalmazható, ha a listamező vízszintes görgetősávot tartalmaz.
Example
// Find the longest string in the list box.
CString str;
CSize sz;
int dx = 0;
CDC *pDC = m_myListBox.GetDC();
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.GetText(i, str);
sz = pDC->GetTextExtent(str);
if (sz.cx > dx)
dx = sz.cx;
}
m_myListBox.ReleaseDC(pDC);
// Set the horizontal extent only if the current extent is not large enough.
if (m_myListBox.GetHorizontalExtent() < dx)
{
m_myListBox.SetHorizontalExtent(dx);
ASSERT(m_myListBox.GetHorizontalExtent() == dx);
}
CListBox::GetItemData
Lekéri a megadott listaelemhez társított alkalmazás által megadott duplaszó értéket.
DWORD_PTR GetItemData(int nIndex) const;
Paraméterek
nIndex
A listamezőben lévő elem nullaalapú indexét adja meg.
Visszaadott érték
Az elemhez társított érték, vagy LB_ERR hiba esetén.
Megjegyzések
A duplaszó értéke egy dwItemDataSetItemData hívás paramétere volt.
Example
// If any item's data is equal to zero then reset it to -1.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
if (m_myListBox.GetItemData(i) == 0)
{
m_myListBox.SetItemData(i, (DWORD)-1);
}
}
CListBox::GetItemDataPtr
A megadott listaelemhez társított alkalmazás által megadott 32 bites értéket kéri le mutatóként (void*).
void* GetItemDataPtr(int nIndex) const;
Paraméterek
nIndex
A listamezőben lévő elem nullaalapú indexét adja meg.
Visszaadott érték
Lekéri a mutatót, vagy -1, ha hiba történik.
Example
LPVOID lpmyPtr = pParentWnd;
// Check all the items in the list box; if an item's
// data pointer is equal to my pointer then reset it to NULL.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
if (m_myListBox.GetItemDataPtr(i) == lpmyPtr)
{
m_myListBox.SetItemDataPtr(i, NULL);
}
}
CListBox::GetItemHeight
Meghatározza a listaelemek magasságát.
int GetItemHeight(int nIndex) const;
Paraméterek
nIndex
A listamezőben lévő elem nullaalapú indexét adja meg. Ezt a paramétert csak akkor használja a rendszer, ha a listamező stílusa megvan LBS_OWNERDRAWVARIABLE , ellenkező esetben 0 értékre kell állítani.
Visszaadott érték
A listamező elemeinek magassága képpontban. Ha a listamező stílussal LBS_OWNERDRAWVARIABLE rendelkezik, a visszatérési érték a megadott nIndexelem magassága. Hiba esetén a visszatérési érték a következő LB_ERR.
Example
// Set the height of every item so the item
// is completely visible.
CString str;
CSize sz;
CDC *pDC = m_myListBox.GetDC();
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.GetText(i, str);
sz = pDC->GetTextExtent(str);
// Only want to set the item height if the current height
// is not big enough.
if (m_myListBox.GetItemHeight(i) < sz.cy)
m_myListBox.SetItemHeight(i, sz.cy);
}
m_myListBox.ReleaseDC(pDC);
CListBox::GetItemRect
Lekéri annak a téglalapnak a méreteit, amelyek egy listaelemhez kötik, mivel az jelenleg a listamezőablakban jelenik meg.
int GetItemRect(
int nIndex,
LPRECT lpRect) const;
Paraméterek
nIndex
Az elem nulla alapú indexét adja meg.
lpRect
Hosszú mutatót ad meg egy RECT olyan struktúrához , amely megkapja az elem listamező ügyfélkoordinátáit.
Visszaadott érték
LB_ERR hiba esetén.
Example
// Dump all of the items bounds.
CString str;
RECT r;
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.GetItemRect(i, &r);
str.Format(_T("item %d: left = %d, top = %d, right = %d, ")
_T("bottom = %d\r\n"),
i,
r.left,
r.top,
r.right,
r.bottom);
AFXDUMP(str);
}
CListBox::GetListBoxInfo
Lekéri az oszloponkénti elemek számát.
DWORD GetListBoxInfo() const;
Visszaadott érték
Az objektum oszloponkénti elemeinek CListBox száma.
Megjegyzések
Ez a tagfüggvény a Windows SDK-ban leírtak szerint emulálja az LB_GETLISTBOXINFO üzenet funkcióit.
CListBox::GetLocale
Lekéri a listamező által használt területi beállításokat.
LCID GetLocale() const;
Visszaadott érték
A listamezőben lévő sztringek területi azonosítója (LCID).
Megjegyzések
A területi beállítás például a rendezett lista sztringjeinek rendezési sorrendjének meghatározására szolgál.
Example
Lásd a példát.CListBox::SetLocale
CListBox::GetSel
Lekéri egy elem kijelölési állapotát.
int GetSel(int nIndex) const;
Paraméterek
nIndex
Az elem nulla alapú indexét adja meg.
Visszaadott érték
Pozitív szám, ha a megadott elem van kiválasztva; ellenkező esetben 0. A visszatérési érték az, LB_ERR ha hiba történik.
Megjegyzések
Ez a tagfüggvény egy- és többkijelöléses listamezőkkel is működik.
Az aktuálisan kijelölt listaelem indexének lekéréséhez használja CListBox::GetCurSela következőt: .
Example
// Dump all of the items select state.
CString str;
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
str.Format(_T("item %d: select state is %s\r\n"),
i,
m_myListBox.GetSel(i) > 0 ? _T("true") : _T("false"));
AFXDUMP(str);
}
CListBox::GetSelCount
Lekéri a kijelölt elemek teljes számát egy többszörös kijelölési listamezőben.
int GetSelCount() const;
Visszaadott érték
A listamezőben kijelölt elemek száma. Ha a listamező egy kijelölési lista, a visszatérési érték a következő LB_ERR.
Example
Lásd a példát.CListBox::GetSelItems
CListBox::GetSelItems
A puffert egész számok tömbjével tölti ki, amely egy többszörös kijelölési lista kijelölt elemeinek elemszámát határozza meg.
int GetSelItems(
int nMaxItems,
LPINT rgIndex) const;
Paraméterek
nMaxItems
Megadja azon kijelölt elemek maximális számát, amelyeknek az elemszámait a pufferbe kell helyezni.
rgIndex
Egy olyan pufferre mutató mutatót ad meg, amely nMaxItemselég nagy a megadott számú egész számhoz.
Visszaadott érték
A pufferbe helyezett elemek tényleges száma. Ha a listamező egy kijelölési lista, a visszatérési érték a következő LB_ERR.
Example
// Get the indexes of all the selected items.
int nCount = m_myODListBox.GetSelCount();
CArray<int, int> aryListBoxSel;
aryListBoxSel.SetSize(nCount);
m_myODListBox.GetSelItems(nCount, aryListBoxSel.GetData());
// Dump the selection array.
AFXDUMP(aryListBoxSel);
CListBox::GetText
Sztringet kap egy listamezőből.
int GetText(
int nIndex,
LPTSTR lpszBuffer) const;
void GetText(
int nIndex,
CString& rString) const;
Paraméterek
nIndex
A lekérendő sztring nulla alapú indexét adja meg.
lpszBuffer
A sztringet fogadó pufferre mutat. A puffernek elegendő szóközzel kell rendelkeznie a sztringhez, és null karaktert kell megszüntetnie. A sztring mérete előre meghatározható a GetTextLen tagfüggvény meghívásával.
rString
Egy objektumra mutató CString hivatkozás.
Visszaadott érték
A sztring hossza (bájtban), a végződő null karakter kivételével. Ha nIndex nem ad meg érvényes indexet, a visszatérési érték a következő LB_ERR.
Megjegyzések
A tagfüggvény második formája kitölt egy objektumot a sztringszöveggel CString .
Example
// Dump all of the items in the list box.
CString str, str2;
int n;
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
n = m_myListBox.GetTextLen(i);
m_myListBox.GetText(i, str.GetBuffer(n));
str.ReleaseBuffer();
str2.Format(_T("item %d: %s\r\n"), i, str.GetBuffer(0));
AFXDUMP(str2);
}
CListBox::GetTextLen
Lekéri egy karakterlánc hosszát egy listaelemben.
int GetTextLen(int nIndex) const;
Paraméterek
nIndex
A sztring nulla alapú indexét adja meg.
Visszaadott érték
A sztring hossza karakterekben, a befejező null karakter kivételével. Ha nIndex nem ad meg érvényes indexet, a visszatérési érték a következő LB_ERR.
Example
Lásd a példát.CListBox::GetText
CListBox::GetTopIndex
A listamező első látható elemének nullaalapú indexét kéri le.
int GetTopIndex() const;
Visszaadott érték
Ha sikeres, akkor a listamező első látható elemének nullaalapú indexe. LB_ERR
Megjegyzések
Kezdetben a 0. elem a listamező tetején található, de ha a listamező görgetve van, előfordulhat, hogy egy másik elem van a tetején.
Example
// Want an item in the bottom half to be the first visible item.
int n = m_myListBox.GetCount() / 2;
if (m_myListBox.GetTopIndex() < n)
{
m_myListBox.SetTopIndex(n);
ASSERT(m_myListBox.GetTopIndex() == n);
}
CListBox::InitStorage
Memóriát foglal le a listaelemek tárolásához.
int InitStorage(
int nItems,
UINT nBytes);
Paraméterek
nItems
Megadja azoknak az elemeknek a számát, amelyek számára helyet szeretne lefoglalni.
nBytes
Megadja az elemsztringekhez lefoglalandó további memória mennyiségét bájtban.
Visszaadott érték
Ha sikeres, a listamezőben tárolható elemek maximális száma a memória újratelepítése előtt, ellenkező esetben LB_ERRSPACEnem áll rendelkezésre elegendő memória.
Megjegyzések
Ezt a függvényt meghívhatja, mielőtt nagy számú elemet ad hozzá egy CListBox.
Ez a függvény felgyorsítja a nagy számú (több mint 100) elemből álló listamezők inicializálását. Előre áthelyezi a megadott mennyiségű memóriát, hogy az azt követő AddString, InsertStringés Dir a függvények hatékonyabbak legyenek. A paraméterek becsléseit használhatja. Ha túlbecsüli, a többletmemória lefoglalva marad; ha alábecsüli, a listamező szükség szerint további memóriát foglal le.
A sztring tárolásához szükséges memória tartalmazza a null terminátort. Ezért ha 100 sztringet szeretne hozzáadni, mindegyik 10 karakter hosszúságú, akkor egy 100-as wParam és egy 100 × (10 + 1) lParam × sizeof(TCHAR) értéket adna át.
Csak Windows 95/98 esetén: A nItems paraméter csak 16 bites értékekre korlátozódik. Ez azt jelenti, hogy a listamezők legfeljebb 32 767 elemet tartalmazhatnak. Bár az elemek száma korlátozott, a listamezőben lévő elemek teljes méretét csak a rendelkezésre álló memória korlátozza.
Example
// Reserve space in the list box for 256 additional strings with
// about 15 characters per string.
int n = m_myListBox.InitStorage(256, 256 * (15 + 1) * sizeof(TCHAR));
ASSERT(n != LB_ERRSPACE);
// Add 256 items to the list box.
CString str;
for (int i = 0; i < 256; i++)
{
str.Format(_T("item string %d"), i);
m_myListBox.AddString(str);
}
CListBox::InsertString
Sztring beszúrása a listamezőbe.
int InsertString(
int nIndex,
LPCTSTR lpszItem);
Paraméterek
nIndex
Megadja a sztring beszúrásához használt pozíció nullaalapú indexét. Ha ez a paraméter -1, a sztring a lista végére kerül.
lpszItem
A beszúrni kívánt null értékű sztringre mutat.
Visszaadott érték
Annak a pozíciónak a nullaalapú indexe, amelyre a sztringet beszúrták. A visszatérési érték az, LB_ERR ha hiba történik; a visszatérési érték az, LB_ERRSPACE ha nincs elegendő hely az új sztring tárolásához.
Megjegyzések
AddString A tagfüggvénytől InsertString eltérően nem okoz rendezést a LBS_SORT stílust tartalmazó lista.
Example
// Insert items in between existing items.
CString str;
int n = m_myListBox.GetCount();
for (int i = 0; i < n; i++)
{
str.Format(_T("item string %c"), (char)('A' + i));
m_myListBox.InsertString(2 * i, str);
}
CListBox::ItemFromPoint
Meghatározza a megadott ponthoz ptlegközelebbi listaelemet.
UINT ItemFromPoint(
CPoint pt,
BOOL& bOutside) const;
Paraméterek
pt
A listamező ügyfélterületének bal felső sarkához viszonyítva megadott legközelebbi elem megkeresésének pontja.
bOutside
Hivatkozzon egy BOOL változóra TRUE , amely akkor lesz beállítva, ha pt a listapanel ügyfélterületén kívül esik, FALSE ha pt a listamező ügyfélterületén belül van.
Visszaadott érték
A legközelebbi elem indexe a megadott ptponthoz.
Megjegyzések
Ezzel a függvénnyel meghatározhatja, hogy az egérmutató melyik listaelemre lép.
Example
Lásd a példát.CListBox::SetAnchorIndex
CListBox::MeasureItem
A keretrendszer meghívja, amikor létrejön egy tulajdonos-rajz stílusú listamező.
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
Paraméterek
lpMeasureItemStruct
Hosszú mutató egy MEASUREITEMSTRUCT szerkezetre.
Megjegyzések
Alapértelmezés szerint ez a tagfüggvény nem tesz semmit. Bírálja felül ezt a tagfüggvényt, és töltse ki a struktúrát, MEASUREITEMSTRUCT hogy tájékoztassa a Windowst a listamező dimenzióiról. Ha a listamező a LBS_OWNERDRAWVARIABLE stílussal jön létre, a keretrendszer meghívja ezt a tagfüggvényt a lista minden eleméhez. Ellenkező esetben a rendszer csak egyszer hívja meg ezt a tagot.
A stílusnak a LBS_OWNERDRAWFIXED tagfüggvényével SubclassDlgItemCWndlétrehozott tulajdonos-rajz listában való használatáról további információt a Technical Note 14-ben található vitafórumban talál.
Tekintse meg CWnd::OnMeasureItem a MEASUREITEMSTRUCT szerkezet leírását.
Example
// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example measures an item and sets the height of the item to twice the
// vertical extent of its text. The list box control was created with the
// following code:
// m_myODListBox.Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
// CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
void CMyODListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
ASSERT(lpMeasureItemStruct->CtlType == ODT_LISTBOX);
LPCTSTR lpszText = (LPCTSTR)lpMeasureItemStruct->itemData;
ASSERT(lpszText != NULL);
CSize sz;
CDC *pDC = GetDC();
sz = pDC->GetTextExtent(lpszText);
ReleaseDC(pDC);
lpMeasureItemStruct->itemHeight = 2 * sz.cy;
}
CListBox::ResetContent
Eltávolítja az összes elemet egy listamezőből.
void ResetContent();
Example
// Delete all the items from the list box.
m_myListBox.ResetContent();
ASSERT(m_myListBox.GetCount() == 0);
CListBox::SelectString
Megkeresi a megadott sztringnek megfelelő listaelemet, és ha talál egy megfelelő elemet, kiválasztja az elemet.
int SelectString(
int nStartAfter,
LPCTSTR lpszItem);
Paraméterek
nStartAfter
Az elem nulla alapú indexét tartalmazza az első keresendő elem előtt. Amikor a keresés eléri a listamező alját, a listamező tetejétől a megadott nStartAfterelemig folytatódik. Ha nStartAfter -1, a teljes listamező az elejétől kezdve keresve lesz.
lpszItem
A keresendő előtagot tartalmazó null értékű sztringre mutat. A keresés a kis- és nagybetűk függetlenek, ezért ez a sztring tartalmazhat nagybetűk és kisbetűk tetszőleges kombinációját.
Visszaadott érték
A kijelölt elem indexe, ha a keresés sikeres volt. Ha a keresés sikertelen volt, a visszatérési érték az, LB_ERR és az aktuális kijelölés nem módosul.
Megjegyzések
A listamező szükség esetén görgetve jeleníti meg a kijelölt elemet.
Ez a tagfüggvény nem használható olyan listamezővel, amely stílussal rendelkezik LBS_MULTIPLESEL .
Egy elem csak akkor van kijelölve, ha a kezdő karakterei (a kezdőpontból) megegyeznek a megadott sztringben lpszItemszereplő karakterekkel.
FindString A tagfüggvény használatával az elem kijelölése nélkül kereshet sztringet.
Example
// The string to match.
LPCTSTR lpszmyString = _T("item 5");
// Select the item that begins with the specified string.
int nIndex = m_myListBox.SelectString(0, lpszmyString);
ASSERT(nIndex != LB_ERR);
CListBox::SelItemRange
Több egymást követő elem kijelölése több kijelölési listában.
int SelItemRange(
BOOL bSelect,
int nFirstItem,
int nLastItem);
Paraméterek
bSelect
A kijelölés beállításának módját adja meg. Ha bSelect igen TRUE, a sztring ki van jelölve és ki van emelve, ha FALSEa kiemelés el lesz távolítva, és a sztring már nincs kijelölve.
nFirstItem
Az első beállítandó elem nulla alapú indexét adja meg.
nLastItem
Az utolsó beállítandó elem nullaalapú indexét adja meg.
Visszaadott érték
LB_ERR hiba esetén.
Megjegyzések
Ezt a tagfüggvényt csak több kijelölési listamezővel használja. Ha csak egy elemet kell kijelölnie egy többszörös kijelölésű listamezőben – vagyis ha nFirstItem egyenlő nLastItem – hívja meg helyette a SetSel tagfüggvényt.
Example
// Select half of the items.
m_myODListBox.SelItemRange(TRUE, 0, m_myODListBox.GetCount() / 2);
CListBox::SetAnchorIndex
Ha a horgonyt egy többszörös kijelölési listamezőben állítja be, azzal megkezdheti a bővített kijelölést.
void SetAnchorIndex(int nIndex);
Paraméterek
nIndex
Megadja annak a listaelemnek a nullaalapú indexét, amely a horgony lesz.
Megjegyzések
Több kijelölésű listamezőben a horgonyelem az egybefüggő kijelölt elemek blokkjának első vagy utolsó eleme.
Example
void CMyODListBox::OnLButtonDown(UINT nFlags, CPoint point)
{
BOOL bOutside = TRUE;
UINT uItem = ItemFromPoint(point, bOutside);
if (!bOutside)
{
// Set the anchor to be the middle item.
SetAnchorIndex(uItem);
ASSERT((UINT)GetAnchorIndex() == uItem);
}
CListBox::OnLButtonDown(nFlags, point);
}
CListBox::SetCaretIndex
A fókusz téglalapot a megadott index elemére állítja be egy többszörös kijelölési listamezőben.
int SetCaretIndex(
int nIndex,
BOOL bScroll = TRUE);
Paraméterek
nIndex
Megadja az elem nullaalapú indexét, amely a fókusz téglalapját szeretné megkapni a listamezőben.
bScroll
Ha ez az érték 0, az elem görgetve lesz, amíg teljesen látható nem lesz. Ha ez az érték nem 0, a program addig görgeti az elemet, amíg legalább részben nem látható.
Visszaadott érték
LB_ERR hiba esetén.
Megjegyzések
Ha az elem nem látható, a program görgeti a nézetbe.
Example
// Set the caret to be the middle item.
m_myListBox.SetCaretIndex(m_myListBox.GetCount() / 2);
ASSERT(m_myListBox.GetCaretIndex() == m_myListBox.GetCount() / 2);
CListBox::SetColumnWidth
A többoszlopos listamező összes oszlopának képpontban megadott szélességét állítja be (a LBS_MULTICOLUMN stílussal létrehozva).
void SetColumnWidth(int cxWidth);
Paraméterek
cxWidth
Az összes oszlop képpontban kifejezett szélességét adja meg.
Example
// Find the pixel width of the largest item.
CString str;
CSize sz;
int dx = 0;
CDC* pDC = myListBox.GetDC();
for (int i = 0; i < myListBox.GetCount(); i++)
{
myListBox.GetText(i, str);
sz = pDC->GetTextExtent(str);
if (sz.cx > dx)
dx = sz.cx;
}
myListBox.ReleaseDC(pDC);
// Set the column width of the first column to be one and 1/3 units
// of the largest string.
myListBox.SetColumnWidth(dx * 4 / 3);
CListBox::SetCurSel
Kiválaszt egy sztringet, és szükség esetén görgeti a nézetbe.
int SetCurSel(int nSelect);
Paraméterek
nSelect
A kijelölendő sztring nulla alapú indexét adja meg. Ha nSelect -1, a listamező nincs kijelölve.
Visszaadott érték
LB_ERR hiba esetén.
Megjegyzések
Az új sztring kijelölésekor a listamező eltávolítja a kiemelést a korábban kijelölt sztringből.
Ezt a tagfüggvényt csak egykijelölési listamezőkkel használhatja.
Ha több kijelölést tartalmazó listában szeretne kijelölést beállítani vagy eltávolítani, használja CListBox::SetSela következőt:
Example
// Select the last item in the list box.
int nCount = m_myListBox.GetCount();
if (nCount > 0)
m_myListBox.SetCurSel(nCount - 1);
CListBox::SetHorizontalExtent
Beállítja a szélességet képpontban, amellyel a listamező vízszintesen görgethető.
void SetHorizontalExtent(int cxExtent);
Paraméterek
cxExtent
Megadja, hogy hány képponttal görgethető a listamező vízszintesen.
Megjegyzések
Ha a lista mérete kisebb ennél az értéknél, a vízszintes görgetősáv vízszintesen görgeti a lista elemeit. Ha a listamező ekkora vagy nagyobb ennél az értéknél, a vízszintes görgetősáv rejtett.
A hívás SetHorizontalExtentmegválaszolásához a listamezőt a WS_HSCROLL stílussal kell definiálni.
Ez a tagfüggvény nem hasznos többoszlopos listamezők esetén. Többoszlopos listamezők esetén hívja meg a tagfüggvényt SetColumnWidth .
Example
// Find the longest string in the list box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC *pDC = m_myListBox.GetDC();
CFont *pFont = m_myListBox.GetFont();
// Select the listbox font, save the old font
CFont *pOldFont = pDC->SelectObject(pFont);
// Get the text metrics for avg char width
pDC->GetTextMetrics(&tm);
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.GetText(i, str);
sz = pDC->GetTextExtent(str);
// Add the avg width to prevent clipping
sz.cx += tm.tmAveCharWidth;
if (sz.cx > dx)
dx = sz.cx;
}
// Select the old font back into the DC
pDC->SelectObject(pOldFont);
m_myListBox.ReleaseDC(pDC);
// Set the horizontal extent so every character of all strings
// can be scrolled to.
m_myListBox.SetHorizontalExtent(dx);
CListBox::SetItemData
Egy listamezőben megadott elemhez társított értéket állít be.
int SetItemData(
int nIndex,
DWORD_PTR dwItemData);
Paraméterek
nIndex
Az elem nulla alapú indexét adja meg.
dwItemData
Megadja az elemhez társítandó értéket.
Visszaadott érték
LB_ERR hiba esetén.
Example
// Set the data of each item to be equal to its index.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.SetItemData(i, i);
}
CListBox::SetItemDataPtr
A listamezőben megadott elemhez társított 32 bites érték beállítása a megadott mutatóra ( void*).
int SetItemDataPtr(
int nIndex,
void* pData);
Paraméterek
nIndex
Az elem nulla alapú indexét adja meg.
pData
Megadja az elemhez társítandó mutatót.
Visszaadott érték
LB_ERR hiba esetén.
Megjegyzések
Ez a mutató érvényes marad a listamező élettartamára, annak ellenére, hogy az elem relatív pozíciója a listamezőben az elemek hozzáadásakor vagy eltávolításakor változhat. Ezért az elem indexe a mezőben változhat, de a mutató megbízható marad.
Example
// Set the data pointer of each item to be NULL.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.SetItemDataPtr(i, NULL);
}
CListBox::SetItemHeight
A listamező elemeinek magasságát állítja be.
int SetItemHeight(
int nIndex,
UINT cyItemHeight);
Paraméterek
nIndex
A listamezőben lévő elem nullaalapú indexét adja meg. Ezt a paramétert csak akkor használja a rendszer, ha a listamező stílusa megvan LBS_OWNERDRAWVARIABLE , ellenkező esetben 0 értékre kell állítani.
cyItemHeight
Megadja az elem magasságát képpontban.
Visszaadott érték
LB_ERR ha az index vagy a magasság érvénytelen.
Megjegyzések
Ha a listamező stílussal LBS_OWNERDRAWVARIABLE rendelkezik, ez a függvény a megadott elem magasságát állítja nIndexbe. Ellenkező esetben ez a függvény a listamező összes elemének magasságát állítja be.
Example
// Set the height of every item to be the
// vertical size of the item's text extent.
CString str;
CSize sz;
CDC *pDC = myListBox.GetDC();
for (int i = 0; i < myListBox.GetCount(); i++)
{
myListBox.GetText(i, str);
sz = pDC->GetTextExtent(str);
myListBox.SetItemHeight(i, sz.cy);
}
myListBox.ReleaseDC(pDC);
CListBox::SetLocale
A lista területi azonosítójának beállítása.
LCID SetLocale(LCID nNewLocale);
Paraméterek
nNewLocale
A listamezőhöz beállított új területi azonosító (LCID) érték.
Visszaadott érték
A listamező korábbi területi azonosítójának (LCID) értéke.
Megjegyzések
Ha SetLocale nincs meghívva, a rendszer lekérte az alapértelmezett területi beállítást. Ez a rendszer alapértelmezett területi beállítása a Vezérlőpult regionális (vagy nemzetközi) alkalmazásával módosítható.
Example
// My LCID to use.
LCID mylcid = MAKELCID(MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_MEXICAN),
SORT_DEFAULT);
// Force the list box to use my locale.
m_myListBox.SetLocale(mylcid);
ASSERT(m_myListBox.GetLocale() == mylcid);
CListBox::SetSel
Kijelöl egy sztringet egy többszörös kijelölésű listamezőben.
int SetSel(
int nIndex,
BOOL bSelect = TRUE);
Paraméterek
nIndex
A beállítani kívánt sztring nulla alapú indexét tartalmazza. Ha -1, a rendszer hozzáadja vagy eltávolítja a kijelölést az összes sztringből, az értéktől bSelectfüggően.
bSelect
A kijelölés beállításának módját adja meg. Ha bSelect igen TRUE, a sztring ki van jelölve és ki van emelve, ha FALSEa kiemelés el lesz távolítva, és a sztring már nincs kijelölve. A megadott sztring alapértelmezés szerint ki van jelölve, és ki van emelve.
Visszaadott érték
LB_ERR hiba esetén.
Megjegyzések
Ezt a tagfüggvényt csak több kijelölési listamezővel használja.
Ha egyetlen kijelölési listából szeretne kijelölni egy elemet, használja a következőt CListBox::SetCurSel: .
Example
// Select all of the items with an even index and
// deselect all others.
for (int i = 0; i < m_myODListBox.GetCount(); i++)
{
m_myODListBox.SetSel(i, ((i % 2) == 0));
}
CListBox::SetTabStops
A tabulátorpozíciók beállítása egy listamezőben.
void SetTabStops();
BOOL SetTabStops(const int& cxEachStop);
BOOL SetTabStops(
int nTabStops,
LPINT rgTabStops);
Paraméterek
cxEachStop
A tabulátorok minden cxEachStop párbeszédpanelen be vannak állítva. Tekintse meg rgTabStops a párbeszédpanel-egység leírását.
nTabStops
Megadja, hogy hány tabulátor legyen a listamezőben.
rgTabStops
A párbeszédpanel-egységek tabulátorpozícióit tartalmazó egész számok tömbjének első tagjára mutat. A párbeszédpanel-egység vízszintes vagy függőleges távolság. Egy vízszintes párbeszédpanel-egység az aktuális párbeszédpanel alapszélesség-egységének negyedével egyenlő, egy függőleges párbeszédpanelegység pedig az aktuális párbeszédpanel alapmagasságegységének egynyolcadával egyenlő. A párbeszédpanel alapegységei az aktuális rendszer betűtípusának magassága és szélessége alapján vannak kiszámítva. A GetDialogBaseUnits Windows függvény képpontban adja vissza az aktuális párbeszédpanel alapegységeit. A tabulátorokat növekvő sorrendbe kell rendezni; a vissza fülek nem engedélyezettek.
Visszaadott érték
Nonzero, ha az összes lap be van állítva; egyéb esetben 0.
Megjegyzések
Ha a tabulátorokat 2 párbeszédpanel-egység alapértelmezett méretére szeretné beállítani, hívja meg ennek a tagfüggvénynek a paraméter nélküli verzióját. Ha a tabulátorokat nem 2 méretre szeretné állítani, hívja meg a verziót az cxEachStop argumentummal.
Ha a tabulátorokat mérettömbre szeretné állítani, használja a verziót és az rgTabStopsnTabStops argumentumokat. A program tabulátort állít be az egyes értékekhez rgTabStopsa megadott nTabStopsszámig.
A tagfüggvény hívásának SetTabStops megválaszolásához a listamezőt a LBS_USETABSTOPS stílussal kell létrehozni.
Example
// Find the pixel width of the largest first substring.
CString str;
CSize sz;
int nIndex, dx = 0;
CDC *pDC = myListBox.GetDC();
for (int i = 0; i < myListBox.GetCount(); i++)
{
myListBox.GetText(i, str);
if ((nIndex = str.Find('\t')) != -1)
str = str.Right(nIndex);
sz = pDC->GetTextExtent(str);
if (sz.cx > dx)
dx = sz.cx;
}
myListBox.ReleaseDC(pDC);
// Set tab stops at every one and 1/3 units
// of the largest string.
// NOTE: Convert pixels to dialog units.
myListBox.SetTabStops((dx * 4 / 3 * 4) / LOWORD(::GetDialogBaseUnits()));
CListBox::SetTopIndex
Biztosítja, hogy egy adott listaelem látható legyen.
int SetTopIndex(int nIndex);
Paraméterek
nIndex
A listaelem nulla alapú indexét adja meg.
Visszaadott érték
Nulla, ha sikeres, vagy LB_ERR ha hiba történik.
Megjegyzések
A rendszer addig görgeti a listamezőt, amíg a megadott nIndex elem meg nem jelenik a lista tetején, vagy elérte a maximális görgetési tartományt.
Example
// Set the first visible item in the list box to be the middle item
m_myListBox.SetTopIndex(m_myListBox.GetCount() / 2);
CListBox::VKeyToItem
A keretrendszer meghívja, amikor a listamező szülőablaka üzenetet kap WM_VKEYTOITEM a listamezőből.
virtual int VKeyToItem(
UINT nKey,
UINT nIndex);
Paraméterek
nKey
A felhasználó által lenyomott kulcs virtuális kulcskódja. A szabványos virtuális kulcskódok listáját lásd: Winuser.h
nIndex
A listadoboz-ápoló aktuális pozíciója.
Visszaadott érték
A - 2 értéket adja vissza további művelet nélkül, - 1 értéket az alapértelmezett művelethez, vagy egy nem nem megfelelő számot egy listaelem indexének megadásához, amelyen az alapértelmezett műveletet el szeretné végezni a billentyűleütéshez.
Megjegyzések
Az WM_VKEYTOITEM üzenetet a listamező küldi el, amikor üzenetet kap WM_KEYDOWN , de csak akkor, ha a listamező megfelel az alábbiaknak:
Rendelkezik a
LBS_WANTKEYBOARDINPUTstíluskészlettel.Legalább egy elemből áll.
Ezt a függvényt soha ne nevezd magadnak. Bírálja felül ezt a függvényt, hogy saját egyénileg kezelje a billentyűzetüzeneteket.
Egy értéket kell visszaadnia, amelyből megtudhatja a keretrendszernek, hogy milyen műveletet hajtott végre a felülbírálás. A - 2 visszatérési érték azt jelzi, hogy az alkalmazás kezelte az elem kiválasztásának minden aspektusát, és nem igényel további műveletet a listamezőben. A - 2 visszatérés előtt beállíthatja a kijelölést, vagy áthelyezheti a simítót vagy mindkettőt. A kijelölés beállításához használja SetCurSel vagy SetSel. A gondviselet áthelyezéséhez használja SetCaretIndexa következőt: .
Az - 1 visszatérési érték azt jelzi, hogy a listamezőnek az alapértelmezett műveletet kell végrehajtania a billentyűleütésre válaszul. Az alapértelmezett implementáció eredménye – 1.
A 0 vagy annál nagyobb visszatérési érték megadja a listamező egyik elemének indexét, és azt jelzi, hogy a listamezőnek az adott elem billentyűleütéséhez az alapértelmezett műveletet kell végrehajtania.
Example
// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example moves the caret down one item on the down key and up one item
// on the up key. The list box control was created with the following
// code:
// m_myODListBox.Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
// CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
int CMyODListBox::VKeyToItem(UINT nKey, UINT nIndex)
{
// On key up, move the caret up one item.
if ((nKey == VK_UP) && (nIndex > 0))
{
SetCaretIndex(nIndex - 1);
}
// On key down, move the caret down one item.
else if ((nKey == VK_DOWN) && (nIndex < (UINT)GetCount()))
{
SetCaretIndex(nIndex + 1);
}
// Do not perform any default processing.
return -2;
}
Lásd még
MFC-minta CTRLTEST
CWnd osztály
Hierarchiadiagram
CWnd osztály
CButton osztály
CComboBox osztály
CEdit osztály
CScrollBar osztály
CStatic osztály