Aracılığıyla paylaş


CListBox Sınıf

Windows liste kutusunun işlevselliğini sağlar.

Sözdizimi

class CListBox : public CWnd

Üyeler

Ortak Oluşturucular

Veri Akışı Adı Açıklama
CListBox::CListBox Bir CListBox nesne oluşturur.

Genel Yöntemler

Veri Akışı Adı Açıklama
CListBox::AddString Liste kutusuna dize ekler.
CListBox::CharToItem Dizeleri olmayan sahip-çizim liste kutuları için özel WM_CHAR işleme sağlamak üzere geçersiz kılın.
CListBox::CompareItem Sıralanmış sahip çizim liste kutusunda yeni bir öğenin konumunu belirlemek için çerçeve tarafından çağrılır.
CListBox::Create Windows liste kutusunu oluşturur ve nesneye CListBox ekler.
CListBox::DeleteItem Kullanıcı sahip çizim liste kutusundan bir öğeyi sildiğinde çerçeve tarafından çağrılır.
CListBox::DeleteString Liste kutusundan bir dize siler.
CListBox::Dir Geçerli dizinden liste kutusuna dosya adları, sürücüler veya her ikisini birden ekler.
CListBox::DrawItem Sahip çizim liste kutusunun görsel bir yönü değiştiğinde çerçeve tarafından çağrılır.
CListBox::FindString Liste kutusunda dize arar.
CListBox::FindStringExact Belirtilen dizeyle eşleşen ilk liste kutusu dizesini bulur.
CListBox::GetAnchorIndex Liste kutusundaki geçerli sabit öğenin sıfır tabanlı dizinini alır.
CListBox::GetCaretIndex Birden çok seçimli liste kutusunda odak dikdörtgeni olan öğenin dizinini belirler.
CListBox::GetCount Liste kutusundaki dize sayısını döndürür.
CListBox::GetCurSel Liste kutusunda seçili durumdaki dizenin sıfır tabanlı dizinini döndürür.
CListBox::GetHorizontalExtent Liste kutusunun yatay olarak kaydırılabilmesi için piksel cinsinden genişliği döndürür.
CListBox::GetItemData Liste kutusu öğesiyle ilişkilendirilmiş bir değer döndürür.
CListBox::GetItemDataPtr Liste kutusu öğesine bir işaretçi döndürür.
CListBox::GetItemHeight Liste kutusundaki öğelerin yüksekliğini belirler.
CListBox::GetItemRect Liste kutusu öğesinin şu anda görüntülendiği şekilde sınırlayıcı dikdörtgenini döndürür.
CListBox::GetListBoxInfo Sütun başına öğe sayısını alır.
CListBox::GetLocale Liste kutusunun yerel ayar tanımlayıcısını alır.
CListBox::GetSel Liste kutusu öğesinin seçim durumunu döndürür.
CListBox::GetSelCount Birden çok seçimli liste kutusunda seçili durumdaki dize sayısını döndürür.
CListBox::GetSelItems Liste kutusunda seçili durumda olan dizelerin dizinlerini döndürür.
CListBox::GetText Liste kutusu öğesini arabelleğe kopyalar.
CListBox::GetTextLen Liste kutusu öğesinin bayt cinsinden uzunluğunu döndürür.
CListBox::GetTopIndex Liste kutusundaki ilk görünür dizenin dizinini döndürür.
CListBox::InitStorage Liste kutusu öğeleri ve dizeleri için bellek bloklarını önceden ayırır.
CListBox::InsertString Liste kutusuna belirli bir konuma dize ekler.
CListBox::ItemFromPoint Bir noktaya en yakın liste kutusu öğesinin dizinini döndürür.
CListBox::MeasureItem Liste kutusu boyutlarını belirlemek için sahip çiz liste kutusu oluşturulduğunda çerçeve tarafından çağrılır.
CListBox::ResetContent Liste kutusundaki tüm girişleri temizler.
CListBox::SelectString Tek seçimli liste kutusunda bir dize arar ve seçer.
CListBox::SelItemRange Birden çok seçimli liste kutusunda bir dizi dizeyi seçer veya seçimini kaldırır.
CListBox::SetAnchorIndex Çok seçimli liste kutusundaki tutturucuyu, genişletilmiş seçime başlayacak şekilde ayarlar.
CListBox::SetCaretIndex Odak dikdörtgenini, birden çok seçimli liste kutusunda belirtilen dizindeki öğeye ayarlar.
CListBox::SetColumnWidth Çok sütunlu liste kutusunun sütun genişliğini ayarlar.
CListBox::SetCurSel Bir liste kutusu dizesi seçer.
CListBox::SetHorizontalExtent Liste kutusunun yatay olarak kaydırılabilmesi için piksel cinsinden genişliği ayarlar.
CListBox::SetItemData Liste kutusu öğesiyle ilişkilendirilmiş bir değer ayarlar.
CListBox::SetItemDataPtr Liste kutusu öğesine bir işaretçi ayarlar.
CListBox::SetItemHeight Liste kutusundaki öğelerin yüksekliğini ayarlar.
CListBox::SetLocale Liste kutusunun yerel ayar tanımlayıcısını ayarlar.
CListBox::SetSel Birden çok seçimli liste kutusunda bir liste kutusu öğesini seçer veya seçimini kaldırır.
CListBox::SetTabStops Liste kutusunda sekme durağı konumlarını ayarlar.
CListBox::SetTopIndex Liste kutusundaki ilk görünür dizenin sıfır tabanlı dizinini ayarlar.
CListBox::VKeyToItem Stil kümesine sahip LBS_WANTKEYBOARDINPUT liste kutuları için özel WM_KEYDOWN işleme sağlamak üzere geçersiz kılın.

Açıklamalar

Liste kutusu, kullanıcının görüntüleyip seçebileceği dosya adları gibi öğelerin listesini görüntüler.

Tek seçimli liste kutusunda kullanıcı yalnızca bir öğe seçebilir. Birden çok seçimli liste kutusunda, bir öğe aralığı seçilebilir. Kullanıcı bir öğeyi seçtiğinde, öğe vurgulanır ve liste kutusu üst pencereye bir bildirim iletisi gönderir.

Bir iletişim kutusu şablonundan veya doğrudan kodunuzda bir liste kutusu oluşturabilirsiniz. Doğrudan oluşturmak için nesnesini oluşturun CListBox , ardından üye işlevini çağırarak Create Windows liste kutusu denetimini oluşturun ve nesneye CListBox ekleyin. İletişim kutusu şablonunda liste kutusu kullanmak için, iletişim kutusu sınıfınızda bir liste kutusu değişkeni bildirin, ardından DDX_Control iletişim kutusu sınıfınızın DoDataExchange işlevinde kullanarak üye değişkenini denetime bağlayın. (bu, iletişim kutusu sınıfınıza bir denetim değişkeni eklediğinizde sizin için otomatik olarak yapılır.)

İnşaat, sınıfından CListBoxtüretilen tek adımlı bir işlem olabilir. Türetilmiş sınıf için bir oluşturucu yazın ve oluşturucunun içinden çağrısı Create gerçekleştirin.

Bir liste kutusu tarafından üst öğesine gönderilen Windows bildirim iletilerini işlemek istiyorsanız (genellikle öğesinden CDialogtüretilen bir sınıf), her ileti için üst sınıfa bir ileti eşleme girdisi ve ileti işleyicisi üye işlevi ekleyin.

Her ileti eşleme girdisi aşağıdaki formu alır:

ON_Notification( id, memberFxn )

burada id , bildirimi gönderen liste kutusu denetiminin alt pencere kimliğini belirtir ve memberFxn bildirimi işlemek için yazdığınız üst üye işlevinin adıdır.

Ebeveynin işlev prototipi aşağıdaki gibidir:

afx_msg void memberFxn( );

Aşağıda olası ileti eşlemesi girdilerinin listesi ve bunların üst öğeye gönderileceği servis taleplerinin açıklaması yer alır:

  • ON_LBN_DBLCLK Kullanıcı, liste kutusundaki bir dizeye çift tıklar. Yalnızca stile LBS_NOTIFY sahip bir liste kutusu bu bildirim iletisini gönderir.

  • ON_LBN_ERRSPACE Liste kutusu isteği karşılamak için yeterli bellek ayıramıyor.

  • ON_LBN_KILLFOCUS Liste kutusu giriş odağını kaybediyor.

  • ON_LBN_SELCANCEL Geçerli liste kutusu seçimi iptal edildi. Bu ileti yalnızca bir liste kutusu stiline LBS_NOTIFY sahip olduğunda gönderilir.

  • ON_LBN_SELCHANGE Liste kutusundaki seçim değişti. Seçim üye işlevi tarafından CListBox::SetCurSel değiştirilirse bu bildirim gönderilmez. Bu bildirim yalnızca stili olan bir liste kutusu için LBS_NOTIFY geçerlidir. Kullanıcı LBN_SELCHANGE bir ok tuşuna her bastığında, seçim değişmese bile bildirim iletisi birden çok seçimli liste kutusu için gönderilir.

  • ON_LBN_SETFOCUS Liste kutusu giriş odağını alıyor.

  • ON_WM_CHARTOITEM Dize içermeyen sahip çizim liste kutusu bir WM_CHAR ileti alır.

  • ON_WM_VKEYTOITEM Stile LBS_WANTKEYBOARDINPUT sahip bir liste kutusu bir WM_KEYDOWN ileti alır.

İletişim kutusunda (iletişim kutusu kaynağı aracılığıyla) bir CListBox nesne oluşturursanız, CListBox kullanıcı iletişim kutusunu kapattığında nesne otomatik olarak yok edilir.

Bir pencere içinde bir CListBox nesne oluşturursanız, nesneyi yok CListBox etmeniz gerekebilir. Nesneyi yığında oluşturursanız CListBox , nesne otomatik olarak yok edilir. işlevini kullanarak new yığında nesnesi oluşturursanızCListBox, kullanıcı üst pencereyi kapattığında yok etmek için nesne üzerinde çağrısında delete bulunması gerekir.

Nesnede CListBox herhangi bir bellek ayırırsanız, ayırmayı CListBox atmak için yıkıcıyı geçersiz kılın.

Devralma Hiyerarşisi

CObject

CCmdTarget

CWnd

CListBox

Gereksinimler

Üstbilgi: afxwin.h

CListBox::AddString

Liste kutusuna dize ekler.

int AddString(LPCTSTR lpszItem);

Parametreler

lpszItem
Eklenecek null ile sonlandırılan dizeyi gösterir.

Dönüş Değeri

Liste kutusundaki dizenin sıfır tabanlı dizini. Dönüş değeri bir hata oluşursa, LB_ERR dönüş değeri ise LB_ERRSPACE yeni dizeyi depolamak için yeterli alan olmamasıdır.

Açıklamalar

Liste kutusu stille LBS_SORT oluşturulmadıysa, dize listenin sonuna eklenir. Aksi takdirde, dize listeye eklenir ve liste sıralanır. Liste kutusu stille oluşturulduysa ancak stille LBS_SORT oluşturulmadıysa LBS_HASSTRINGS , çerçeve listeyi üye işlevine yapılan bir veya daha fazla çağrıya CompareItem göre sıralar.

Liste kutusunun içindeki belirli bir konuma dize eklemek için kullanın InsertString .

Örnek

// 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

Liste kutusunun üst penceresi liste kutusundan bir WM_CHARTOITEM ileti aldığında çerçeve tarafından çağrılır.

virtual int CharToItem(
    UINT nKey,
    UINT nIndex);

Parametreler

nKey
Kullanıcının yazdığı karakterin ANSI kodu.

nIndex
Liste kutusu şapka işaretinin geçerli konumu.

Dönüş Değeri

Başka bir eylem veya tuş vuruşu için varsayılan eylemin gerçekleştirildiği liste kutusu öğesinin dizinini belirtmek için zorunlu olmayan bir sayı için - 1 veya - 2 döndürür. Varsayılan uygulama - 1 döndürür.

Açıklamalar

İleti WM_CHARTOITEM , bir WM_CHAR ileti aldığında liste kutusu tarafından gönderilir, ancak yalnızca liste kutusu şu ölçütlerin tümünü karşılıyorsa:

  • Sahip çizim listesi kutusudur.

  • Stil ayarlanmadı LBS_HASSTRINGS .

  • En az bir öğeye sahiptir.

Bu işlevi hiçbir zaman kendiniz çağırmamalısınız. Klavye iletilerinin kendi özel işlemesini sağlamak için bu işlevi geçersiz kılın.

Geçersiz kılma işleminizde, çerçeveye hangi eylemi gerçekleştirdiğinize ilişkin bir değer döndürmeniz gerekir. - 1 veya - 2 dönüş değeri, öğeyi seçmenin tüm yönlerini işlediğinizi ve liste kutusu tarafından başka bir işlem yapılmasını gerektirmediğini gösterir. - 1 veya - 2'yi döndürmeden önce, seçimi ayarlayabilir veya şapka işaretini veya her ikisini birden taşıyabilirsiniz. Seçimi ayarlamak için veya SetSelkullanınSetCurSel. Şapka işaretini taşımak için kullanın SetCaretIndex.

0 veya daha büyük bir dönüş değeri, liste kutusundaki bir öğenin dizinini belirtir ve liste kutusunun verilen öğedeki tuş vuruşu için varsayılan eylemi gerçekleştirmesi gerektiğini belirtir.

Örnek

// 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

Bir CListBox nesne oluşturur.

CListBox();

Açıklamalar

İki adımda bir CListBox nesne oluşturursunuz. İlk olarak oluşturucuyu çağırın ClistBox ve ardından Windows liste kutusunu başlatan ve öğesine ekleyen öğesini çağırınCreateCListBox.

Örnek

// Declare a local CListBox object.
CListBox myListBox;

// Declare a dynamic CListBox object.
CListBox *pmyListBox = new CListBox;

CListBox::CompareItem

Sıralanmış sahip çizim liste kutusunda yeni bir öğenin göreli konumunu belirlemek için çerçeve tarafından çağrılır.

virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);

Parametreler

lpCompareItemStruct
Bir yapıya uzun bir COMPAREITEMSTRUCT işaretçi.

Dönüş Değeri

Yapıda COMPAREITEMSTRUCT açıklanan iki öğenin göreli konumunu gösterir. Aşağıdaki değerlerden biri olabilir:

Değer Anlamı
-1 Öğe 1, 2. öğeden önce sıralanır.
0 Öğe 1 ve öğe 2 aynı şekilde sıralanır.
1 Öğe 1, 2. öğeden sonra sıralanır.

Yapının açıklaması COMPAREITEMSTRUCT için bkzCWnd::OnCompareItem.

Açıklamalar

Varsayılan olarak, bu üye işlevi hiçbir şey yapmaz. Stile sahip çiz liste kutusu oluşturursanız, çerçevenin LBS_SORT liste kutusuna eklenen yeni öğeleri sıralamasına yardımcı olması için bu üye işlevini geçersiz kılmanız gerekir.

Örnek

// 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

Windows liste kutusunu oluşturur ve nesneye CListBox ekler.

virtual BOOL Create(
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID);

Parametreler

dwStyle
Liste kutusunun stilini belirtir. Kutuya liste kutusu stillerinin herhangi bir bileşimini uygulayın.

rect
Liste kutusu boyutunu ve konumunu belirtir. Nesne veya RECT yapı olabilirCRect.

pParentWnd
Liste kutusunun üst penceresini (genellikle bir CDialog nesne) belirtir. Bu olmamalıdır NULL.

nID
Liste kutusunun denetim kimliğini belirtir.

Dönüş Değeri

Başarılı olursa sıfır olmayan; aksi takdirde 0.

Açıklamalar

İki adımda bir CListBox nesne oluşturursunuz. İlk olarak oluşturucuyu çağırın ve ardından Windows liste kutusunu başlatan ve nesnesine ekleyen öğesini çağırınCreateCListBox.

YürütülürkenCreate, Windows , WM_CREATE, WM_NCCALCSIZEve WM_GETMINMAXINFO iletilerini liste kutusu denetimine gönderirWM_NCCREATE.

Bu iletiler varsayılan olarak temel sınıftaki OnNcCreate, OnCreate, OnNcCalcSizeve OnGetMinMaxInfo üye işlevleri CWnd tarafından işlenir. Varsayılan ileti işlemeyi genişletmek için öğesinden CListBoxbir sınıf türetin, yeni sınıfa bir ileti eşlemesi ekleyin ve önceki ileti işleyicisi üye işlevlerini geçersiz kılın. Örneğin, yeni bir sınıf için gerekli başlatmayı gerçekleştirmek için öğesini geçersiz kılın OnCreate.

Liste kutusu denetimine aşağıdaki pencere stillerini uygulayın.

  • WS_CHILD Her zaman

  • WS_VISIBLE Genelde

  • WS_DISABLED Nadiren

  • WS_VSCROLL Dikey kaydırma çubuğu eklemek için

  • WS_HSCROLL Yatay kaydırma çubuğu eklemek için

  • WS_GROUP Denetimleri gruplandırmak için

  • WS_TABSTOP Bu denetime sekmeyle bağlanmaya izin vermek için

Örnek

// 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

Kullanıcı sahip çizim CListBox nesnesinden bir öğeyi sildiğinde veya liste kutusunu yok ettiğinde çerçeve tarafından çağrılır.

virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);

Parametreler

lpDeleteItemStruct
Silinen öğe hakkında bilgi içeren bir Windows DELETEITEMSTRUCT yapısına uzun bir işaretçi.

Açıklamalar

Bu işlevin varsayılan uygulaması hiçbir şey yapmaz. Gerektiğinde sahip çizim liste kutusunu yeniden çizmek için bu işlevi geçersiz kılın.

Yapının açıklaması DELETEITEMSTRUCT için bkzCWnd::OnDeleteItem.

Örnek

// 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

Öğeyi liste kutusundan konumundan nIndex siler.

int DeleteString(UINT nIndex);

Parametreler

nIndex
Silinecek dizenin sıfır tabanlı dizinini belirtir.

Dönüş Değeri

Listede kalan dizelerin sayısı. Dönüş değeri, listedeki öğe sayısından daha büyük bir dizin belirtiyorsa nIndex değeridirLB_ERR.

Açıklamalar

İzleyen nIndex tüm öğeler artık bir konum aşağı doğru ilerler. Örneğin, bir liste kutusu iki öğe içeriyorsa, ilk öğenin silinmesi kalan öğenin artık ilk konumda olmasına neden olur. nIndexİlk konumdaki öğe için =0.

Örnek

// Delete every other item from the list box.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.DeleteString(i);
}

CListBox::Dir

Liste kutusuna dosya adlarının, sürücülerin veya her ikisinin listesini ekler.

int Dir(
    UINT attr,
    LPCTSTR lpszWildCard);

Parametreler

attr
içinde CFile::GetStatusaçıklanan değerlerin enum herhangi bir bileşimi veya aşağıdaki değerlerin herhangi bir bileşimi olabilir:

Değer Anlamı
0x0000 Dosyadan okunabilir veya bu dosyaya yazılabilir.
0x0001 Dosya' dan okunabilir ancak bu dosyaya yazılamaz.
0x0002 Dosya gizlidir ve dizin listesinde görünmez.
0x0004 Dosya bir sistem dosyasıdır.
0x0010 tarafından lpszWildCard belirtilen ad bir dizin belirtir.
0x0020 Dosya arşivlendi.
0x4000 tarafından belirtilen adla eşleşen tüm sürücüleri dahil edin lpszWildCard.
0x8000 Özel bayrak. Özel kullanım bayrağı ayarlanırsa, yalnızca belirtilen türdeki dosyalar listelenir. Aksi takdirde, belirtilen türdeki dosyalar "normal" dosyalara ek olarak listelenir.

lpszWildCard
Bir dosya belirtimi dizesini gösterir. Dize joker karakterler içerebilir (örneğin, *.*).

Dönüş Değeri

Listeye eklenen son dosya adının sıfır tabanlı dizini. Dönüş değeri bir hata oluşursa, LB_ERR dönüş değeri ise LB_ERRSPACE yeni dizeleri depolamak için yeterli alan olmamasıdır.

Örnek

// 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

Sahip çizim liste kutusunun görsel bir yönü değiştiğinde çerçeve tarafından çağrılır.

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

Parametreler

lpDrawItemStruct
Gerekli çizim türü hakkında bilgi içeren bir yapıya uzun bir DRAWITEMSTRUCT işaretçi.

Açıklamalar

itemAction Yapının ve itemState üyeleriDRAWITEMSTRUCT, gerçekleştirilecek çizim eylemini tanımlar.

Varsayılan olarak, bu üye işlevi hiçbir şey yapmaz. Sahip çizim CListBox nesnesi için çizim uygulamak için bu üye işlevini geçersiz kılın. Uygulama, bu üye işlevi sonlanmadan önce içinde lpDrawItemStruct sağlanan görüntü bağlamı için seçilen tüm grafik cihaz arabirimi (GDI) nesnelerini geri yüklemelidir.

Yapının açıklaması DRAWITEMSTRUCT için bkzCWnd::OnDrawItem.

Örnek

// 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

Liste kutusu seçimini değiştirmeden belirtilen ön eki içeren liste kutusundaki ilk dizeyi bulur.

int FindString(
    int nStartAfter,
    LPCTSTR lpszItem) const;

Parametreler

nStartAfter
Aranacak ilk öğeden önce öğenin sıfır tabanlı dizinini içerir. Arama liste kutusunun en altına ulaştığında, liste kutusunun en üstünden tarafından nStartAfterbelirtilen öğeye geri döner. -1 ise nStartAfter , liste kutusunun tamamı baştan aranırsa.

lpszItem
Aranacak ön eki içeren null ile sonlandırılan dizeye işaret eder. Arama büyük/küçük harflerden bağımsızdır, bu nedenle bu dize büyük ve küçük harflerin herhangi bir bileşimini içerebilir.

Dönüş Değeri

Eşleşen öğenin sıfır tabanlı dizini veya LB_ERR arama başarısız olduysa.

Açıklamalar

SelectString Bir dizeyi bulmak ve seçmek için üye işlevini kullanın.

Örnek

// 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

içinde lpszFindbelirtilen dizeyle eşleşen ilk liste kutusu dizesini bulur.

int FindStringExact(
    int nIndexStart,
    LPCTSTR lpszFind) const;

Parametreler

nIndexStart
Aranacak ilk öğeden önce öğenin sıfır tabanlı dizinini belirtir. Arama liste kutusunun en altına ulaştığında, liste kutusunun en üstünden tarafından nIndexStartbelirtilen öğeye geri döner. -1 ise nIndexStart , liste kutusunun tamamı baştan aranırsa.

lpszFind
Aranacak null ile sonlandırılan dizeyi gösterir. Bu dize, uzantı da dahil olmak üzere tam bir dosya adı içerebilir. Arama büyük/küçük harfe duyarlı olmadığından, dize büyük ve küçük harflerin herhangi bir bileşimini içerebilir.

Dönüş Değeri

Eşleşen öğenin dizini veya LB_ERR aramanın başarısız olup olmadığını.

Açıklamalar

Liste kutusu sahip çizim stiliyle oluşturulduysa ancak stil olmadan LBS_HASSTRINGS , FindStringExact üye işlevi çift kelime değerini değeriyle lpszFindeşleştirmeye çalışır.

Örnek

// 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

Liste kutusundaki geçerli tutturucu öğesinin sıfır tabanlı dizinini alır.

int GetAnchorIndex() const;

Dönüş Değeri

Başarılı olursa geçerli bağlantı öğesinin dizini; aksi takdirde LB_ERR.

Açıklamalar

Birden çok seçimli liste kutusunda, tutturucu öğesi bitişik seçili öğeler bloğundaki ilk veya son öğedir.

Örnek

örneğine CListBox::SetAnchorIndexbakın.

CListBox::GetCaretIndex

Birden çok seçimli liste kutusunda odak dikdörtgeni olan öğenin dizinini belirler.

int GetCaretIndex() const;

Dönüş Değeri

Liste kutusunda odak dikdörtgeni olan öğenin sıfır tabanlı dizini. Liste kutusu tek seçimli bir liste kutusuysa, dönüş değeri varsa seçili öğenin dizinidir.

Açıklamalar

Öğe seçilebilir veya seçilmeyebilir.

Örnek

örneğine CListBox::SetCaretIndexbakın.

CListBox::GetCount

Liste kutusundaki öğe sayısını alır.

int GetCount() const;

Dönüş Değeri

Liste kutusundaki öğelerin sayısı veya LB_ERR bir hata oluşursa.

Açıklamalar

Döndürülen sayı, son öğenin dizin değerinden büyüktür (dizin sıfır tabanlıdır).

Örnek

// 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

Varsa, seçili durumdaki öğenin sıfır tabanlı dizinini tek seçimli liste kutusunda alır.

int GetCurSel() const;

Dönüş Değeri

Seçili durumdaki öğenin, tek seçimli bir liste kutusuysa sıfır tabanlı dizini. Şu anda seçili öğe yoksa bu LB_ERR durum geçerli olur.

Birden çok seçimli liste kutusunda, odağı olan öğenin dizini.

Açıklamalar

Birden çok seçimli liste kutusu için arama GetCurSel yapma. Bunun yerine CListBox::GetSelItems kullanın.

Örnek

// 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

Liste kutusundan, yatay olarak kaydırılabildiği piksel cinsinden genişliği alır.

int GetHorizontalExtent() const;

Dönüş Değeri

Liste kutusunun piksel cinsinden kaydırılabilir genişliği.

Açıklamalar

Bu yalnızca liste kutusunda yatay kaydırma çubuğu varsa geçerlidir.

Örnek

// 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

Belirtilen liste kutusu öğesiyle ilişkili uygulama tarafından sağlanan çift kelime değerini alır.

DWORD_PTR GetItemData(int nIndex) const;

Parametreler

nIndex
Liste kutusundaki öğenin sıfır tabanlı dizinini belirtir.

Dönüş Değeri

Öğeyle ilişkili değer veya LB_ERR hata oluşursa.

Açıklamalar

Çift kelime değeri bir SetItemData çağrının dwItemData parametresiydi.

Örnek

// 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

Belirtilen liste kutusu öğesiyle ilişkilendirilmiş, uygulama tarafından sağlanan 32 bit değeri işaretçi (void *) olarak alır.

void* GetItemDataPtr(int nIndex) const;

Parametreler

nIndex
Liste kutusundaki öğenin sıfır tabanlı dizinini belirtir.

Dönüş Değeri

Bir işaretçi veya hata oluşursa -1 alır.

Örnek

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

Liste kutusundaki öğelerin yüksekliğini belirler.

int GetItemHeight(int nIndex) const;

Parametreler

nIndex
Liste kutusundaki öğenin sıfır tabanlı dizinini belirtir. Bu parametre yalnızca liste kutusunda LBS_OWNERDRAWVARIABLE stil varsa kullanılır; aksi takdirde 0 olarak ayarlanmalıdır.

Dönüş Değeri

Liste kutusundaki öğelerin piksel cinsinden yüksekliği. Liste kutusunda LBS_OWNERDRAWVARIABLE stil varsa, dönüş değeri tarafından nIndexbelirtilen öğenin yüksekliğidir. Bir hata oluşursa, dönüş değeri olur LB_ERR.

Örnek

// 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

Şu anda liste kutusu penceresinde görüntülendiği için, bir liste kutusu öğesini sınırlayan dikdörtgenin boyutlarını alır.

int GetItemRect(
    int nIndex,
    LPRECT lpRect) const;

Parametreler

nIndex
Öğenin sıfır tabanlı dizinini belirtir.

lpRect
Öğenin liste kutusu istemci koordinatlarını alan bir yapı için uzun bir RECT işaretçi belirtir.

Dönüş Değeri

LB_ERR hata oluşursa.

Örnek

// 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

Sütun başına öğe sayısını alır.

DWORD GetListBoxInfo() const;

Dönüş Değeri

Nesnenin sütunu CListBox başına öğe sayısı.

Açıklamalar

Bu üye işlevi, Windows SDK'sında açıklandığı gibi iletinin LB_GETLISTBOXINFO işlevselliğine öykünmektedir.

CListBox::GetLocale

Liste kutusu tarafından kullanılan yerel ayarı alır.

LCID GetLocale() const;

Dönüş Değeri

Liste kutusundaki dizeler için yerel ayar tanımlayıcısı (LCID) değeri.

Açıklamalar

Yerel ayar, örneğin sıralanmış liste kutusundaki dizelerin sıralama düzenini belirlemek için kullanılır.

Örnek

örneğine CListBox::SetLocalebakın.

CListBox::GetSel

Bir öğenin seçim durumunu alır.

int GetSel(int nIndex) const;

Parametreler

nIndex
Öğenin sıfır tabanlı dizinini belirtir.

Dönüş Değeri

Belirtilen öğe seçiliyse pozitif bir sayı; aksi takdirde 0 olur. Dönüş değeri bir LB_ERR hata oluşursa olur.

Açıklamalar

Bu üye işlevi hem tek hem de çoklu seçim liste kutularıyla çalışır.

Seçili durumdaki liste kutusu öğesinin dizinini almak için kullanın CListBox::GetCurSel.

Örnek

// 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

Birden çok seçimli liste kutusundaki seçili öğelerin toplam sayısını alır.

int GetSelCount() const;

Dönüş Değeri

Liste kutusundaki seçili öğelerin sayısı. Liste kutusu tek seçimli bir liste kutusuysa, dönüş değeri olur LB_ERR.

Örnek

örneğine CListBox::GetSelItemsbakın.

CListBox::GetSelItems

Bir arabelleği, birden çok seçimli liste kutusunda seçili öğelerin öğe numaralarını belirten bir tamsayı dizisiyle doldurur.

int GetSelItems(
    int nMaxItems,
    LPINT rgIndex) const;

Parametreler

nMaxItems
Madde numaraları arabelleğe yerleştirilecek seçili öğe sayısı üst sınırını belirtir.

rgIndex
tarafından nMaxItemsbelirtilen tamsayı sayısı için yeterince büyük bir arabelleğe yönelik bir işaretçi belirtir.

Dönüş Değeri

Arabelleğe yerleştirilen öğelerin gerçek sayısı. Liste kutusu tek seçimli bir liste kutusuysa, dönüş değeri olur LB_ERR.

Örnek

// 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

Liste kutusundan bir dize alır.

int GetText(
    int nIndex,
    LPTSTR lpszBuffer) const;

void GetText(
    int nIndex,
    CString& rString) const;

Parametreler

nIndex
Alınacak dizenin sıfır tabanlı dizinini belirtir.

lpszBuffer
Dizeyi alan arabelleğe işaret eder. Arabellek, dize için yeterli alana ve sonlandırıcı null karaktere sahip olmalıdır. Üye işlevi çağrılarak GetTextLen dizenin boyutu önceden belirlenebilir.

rString
Bir nesneye CString başvuru.

Dönüş Değeri

Sonlandırıcı null karakter hariç dizenin uzunluğu (bayt cinsinden). nIndex Geçerli bir dizin belirtmezse, dönüş değeri olurLB_ERR.

Açıklamalar

Bu üye işlevinin ikinci biçimi bir CString nesneyi dize metniyle doldurur.

Örnek

// 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

Liste kutusu öğesindeki bir dizenin uzunluğunu alır.

int GetTextLen(int nIndex) const;

Parametreler

nIndex
Dizenin sıfır tabanlı dizinini belirtir.

Dönüş Değeri

Sonlandırıcı null karakter hariç, dizenin karakter cinsinden uzunluğu. nIndex Geçerli bir dizin belirtmezse, dönüş değeri olurLB_ERR.

Örnek

örneğine CListBox::GetTextbakın.

CListBox::GetTopIndex

Liste kutusundaki ilk görünür öğenin sıfır tabanlı dizinini alır.

int GetTopIndex() const;

Dönüş Değeri

Başarılı olursa, liste kutusundaki ilk görünür öğenin sıfır tabanlı dizini, LB_ERR aksi takdirde.

Açıklamalar

Başlangıçta, 0 öğesi liste kutusunun en üstünde yer alır, ancak liste kutusu kaydırılırsa, en üstte başka bir öğe olabilir.

Örnek

// 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

Liste kutusu öğelerini depolamak için bellek ayırır.

int InitStorage(
    int nItems,
    UINT nBytes);

Parametreler

nItems
Eklenecek öğe sayısını belirtir.

nBytes
Öğe dizeleri için ayrılacak bellek miktarını bayt cinsinden belirtir.

Dönüş Değeri

Başarılı olursa, bellek yeniden ayırma gerekmeden önce liste kutusunun depolayabilecekleri en fazla öğe sayısıdır; aksi takdirde LB_ERRSPACEyeterli bellek olmadığı anlamına gelir.

Açıklamalar

öğesine çok sayıda öğe CListBoxeklemeden önce bu işlevi çağırın.

Bu işlev, çok sayıda öğe (100'den fazla) içeren liste kutularının başlatılmasını hızlandırmaya yardımcı olur. Sonraki , InsertStringve Dir işlevlerinin mümkün olan en kısa süreyi alması için AddStringbelirtilen bellek miktarını önceden ayırır. Parametreler için tahminleri kullanabilirsiniz. Fazla tahmin ederseniz, bazı ek bellek ayrılır; hafife alırsanız, normal ayırma önceden tahsis edilen tutarı aşan öğeler için kullanılır.

Yalnızca Windows 95/98: nItems Parametre 16 bit değerlerle sınırlıdır. Bu, liste kutularının 32.767'den fazla öğe içeremeyeceği anlamına gelir. Öğe sayısı kısıtlanmış olsa da, liste kutusundaki öğelerin toplam boyutu yalnızca kullanılabilir bellekle sınırlıdır.

Örnek

// Initialize the storage of the list box to be 256 strings with
// about 10 characters per string, performance improvement.
int n = m_myListBox.InitStorage(256, 16 * 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

Liste kutusuna bir dize ekler.

int InsertString(
    int nIndex,
    LPCTSTR lpszItem);

Parametreler

nIndex
Dize eklenecek konumun sıfır tabanlı dizinini belirtir. Bu parametre -1 ise, dize listenin sonuna eklenir.

lpszItem
Eklenecek null ile sonlandırılan dizeyi gösterir.

Dönüş Değeri

Dizenin eklendiği konumun sıfır tabanlı dizini. Dönüş değeri bir hata oluşursa, LB_ERR dönüş değeri ise LB_ERRSPACE yeni dizeyi depolamak için yeterli alan olmamasıdır.

Açıklamalar

Üye işlevinin AddString aksine, InsertString stiline sahip bir listenin LBS_SORT sıralanmasına neden olmaz.

Örnek

// 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

içinde ptbelirtilen noktaya en yakın liste kutusu öğesini belirler.

UINT ItemFromPoint(
    CPoint pt,
    BOOL& bOutside) const;

Parametreler

pt
Liste kutusunun istemci alanının sol üst köşesine göre belirtilen en yakın öğeyi bulmak için kullanılacak nokta.

bOutside
BOOL Liste kutusunun istemci alanının dışındaysapt, liste kutusunun istemci alanının içindeyse pt olarak FALSE ayarlanacak TRUE bir değişkene başvuru.

Dönüş Değeri

içinde ptbelirtilen noktaya en yakın öğenin dizini.

Açıklamalar

Fare imlecinin hangi liste kutusu öğesinin üzerine taşındığını belirlemek için bu işlevi kullanabilirsiniz.

Örnek

örneğine CListBox::SetAnchorIndexbakın.

CListBox::MeasureItem

Sahip çizim stiline sahip bir liste kutusu oluşturulduğunda çerçeve tarafından çağrılır.

virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);

Parametreler

lpMeasureItemStruct
Bir yapıya uzun bir MEASUREITEMSTRUCT işaretçi.

Açıklamalar

Varsayılan olarak, bu üye işlevi hiçbir şey yapmaz. Bu üye işlevini geçersiz kılın ve Windows'u MEASUREITEMSTRUCT liste kutusu boyutları hakkında bilgilendirmek için yapıyı doldurun. Liste kutusu stille LBS_OWNERDRAWVARIABLE oluşturulursa, çerçeve liste kutusundaki her öğe için bu üye işlevini çağırır. Aksi takdirde, bu üye yalnızca bir kez çağrılır.

öğesinin LBS_OWNERDRAWFIXED üye işleviyle SubclassDlgItem CWndoluşturulan sahip çizim liste kutusunda stili kullanma hakkında daha fazla bilgi için Teknik Not 14'teki tartışmaya bakın.

Yapının açıklaması MEASUREITEMSTRUCT için bkzCWnd::OnMeasureItem.

Örnek

// 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

Liste kutusundan tüm öğeleri kaldırır.

void ResetContent();

Örnek

// Delete all the items from the list box.
m_myListBox.ResetContent();
ASSERT(m_myListBox.GetCount() == 0);

CListBox::SelectString

Belirtilen dizeyle eşleşen bir liste kutusu öğesini arar ve eşleşen bir öğe bulunursa öğeyi seçer.

int SelectString(
    int nStartAfter,
    LPCTSTR lpszItem);

Parametreler

nStartAfter
Aranacak ilk öğeden önce öğenin sıfır tabanlı dizinini içerir. Arama liste kutusunun en altına ulaştığında, liste kutusunun en üstünden tarafından nStartAfterbelirtilen öğeye geri döner. -1 ise nStartAfter , liste kutusunun tamamı baştan aranırsa.

lpszItem
Aranacak ön eki içeren null ile sonlandırılan dizeye işaret eder. Arama büyük/küçük harflerden bağımsızdır, bu nedenle bu dize büyük ve küçük harflerin herhangi bir bileşimini içerebilir.

Dönüş Değeri

Arama başarılı olursa seçili öğenin dizini. Arama başarısız olduysa, dönüş değeri olur LB_ERR ve geçerli seçim değiştirilmez.

Açıklamalar

Seçili öğeyi görünüme getirmek için gerekirse liste kutusu kaydırılır.

Bu üye işlevi, stili olan LBS_MULTIPLESEL bir liste kutusuyla kullanılamaz.

Bir öğe yalnızca ilk karakterleri (başlangıç noktasından) tarafından lpszItembelirtilen dizedeki karakterlerle eşleşiyorsa seçilir.

Öğeyi FindString seçmeden bir dize bulmak için üye işlevini kullanın.

Örnek

// 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

Birden çok seçimli liste kutusunda ardışık birden çok öğe seçer.

int SelItemRange(
    BOOL bSelect,
    int nFirstItem,
    int nLastItem);

Parametreler

bSelect
Seçimin nasıl ayarlandığını belirtir. ise bSelect TRUE, dize seçilir ve vurgulanır; ise FALSEvurgu kaldırılır ve dize artık seçilmez.

nFirstItem
Ayarlanacağı ilk öğenin sıfır tabanlı dizinini belirtir.

nLastItem
Ayarlanacağı son öğenin sıfır tabanlı dizinini belirtir.

Dönüş Değeri

LB_ERR hata oluşursa.

Açıklamalar

Bu üye işlevini yalnızca çoklu seçim liste kutularıyla kullanın. Birden çok seçimli liste kutusunda yalnızca bir öğe seçmeniz gerekiyorsa (yani eşitse nFirstItem nLastItem ) bunun yerine üye işlevini çağırın SetSel .

Örnek

// Select half of the items.
m_myODListBox.SelItemRange(TRUE, 0, m_myODListBox.GetCount() / 2);

CListBox::SetAnchorIndex

Çok seçimli liste kutusundaki tutturucuyu, genişletilmiş seçime başlayacak şekilde ayarlar.

void SetAnchorIndex(int nIndex);

Parametreler

nIndex
Bağlayıcı olacak liste kutusu öğesinin sıfır tabanlı dizinini belirtir.

Açıklamalar

Birden çok seçimli liste kutusunda, tutturucu öğesi bitişik seçili öğeler bloğundaki ilk veya son öğedir.

Örnek

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

Odak dikdörtgenini, birden çok seçimli liste kutusunda belirtilen dizindeki öğeye ayarlar.

int SetCaretIndex(
    int nIndex,
    BOOL bScroll = TRUE);

Parametreler

nIndex
Liste kutusunda odak dikdörtgenini alacak öğenin sıfır tabanlı dizinini belirtir.

bScroll
Bu değer 0 ise, öğe tamamen görünene kadar kaydırılır. Bu değer 0 değilse, öğe en azından kısmen görünene kadar kaydırılır.

Dönüş Değeri

LB_ERR hata oluşursa.

Açıklamalar

Öğe görünmüyorsa, görünüme kaydırılır.

Örnek

// 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

Çok sütunlu liste kutusundaki tüm sütunların genişliğini piksel cinsinden ayarlar (stille LBS_MULTICOLUMN oluşturulur).

void SetColumnWidth(int cxWidth);

Parametreler

cxWidth
Tüm sütunların piksel genişliğini belirtir.

Örnek

// 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

Gerekirse bir dizeyi seçer ve görünüme kaydırarak görüntüler.

int SetCurSel(int nSelect);

Parametreler

nSelect
Seçilecek dizenin sıfır tabanlı dizinini belirtir. -1 ise nSelect , liste kutusu hiçbir seçime sahip olmayacak şekilde ayarlanır.

Dönüş Değeri

LB_ERR hata oluşursa.

Açıklamalar

Yeni dize seçildiğinde, liste kutusu önceden seçilen dizeden vurguyu kaldırır.

Bu üye işlevini yalnızca tek seçimli liste kutularıyla kullanın.

Birden çok seçimli liste kutusunda bir seçimi ayarlamak veya kaldırmak için kullanın CListBox::SetSel.

Örnek

// Select the last item in the list box.
int nCount = m_myListBox.GetCount();
if (nCount > 0)
   m_myListBox.SetCurSel(nCount - 1);

CListBox::SetHorizontalExtent

Liste kutusunun yatay olarak kaydırılabildiği genişliği piksel cinsinden ayarlar.

void SetHorizontalExtent(int cxExtent);

Parametreler

cxExtent
Liste kutusunun yatay olarak kaydırılabildiği piksel sayısını belirtir.

Açıklamalar

Liste kutusunun boyutu bu değerden küçükse, yatay kaydırma çubuğu liste kutusundaki öğeleri yatay olarak kaydıracaktır. Liste kutusu bu değerden büyük veya daha büyükse, yatay kaydırma çubuğu gizlenir.

çağrısına yanıt vermek için SetHorizontalExtent, liste kutusunun stiliyle WS_HSCROLL tanımlanmış olması gerekir.

Bu üye işlevi çok sütunlu liste kutuları için kullanışlı değildir. Çok sütunlu liste kutuları için üye işlevini çağırın SetColumnWidth .

Örnek

// 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

Liste kutusunda belirtilen öğeyle ilişkilendirilmiş bir değer ayarlar.

int SetItemData(
    int nIndex,
    DWORD_PTR dwItemData);

Parametreler

nIndex
Öğenin sıfır tabanlı dizinini belirtir.

dwItemData
Öğeyle ilişkilendirilecek değeri belirtir.

Dönüş Değeri

LB_ERR hata oluşursa.

Örnek

// 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

Liste kutusunda belirtilen öğeyle ilişkili 32 bit değeri belirtilen işaretçi ( void *) olacak şekilde ayarlar.

int SetItemDataPtr(
    int nIndex,
    void* pData);

Parametreler

nIndex
Öğenin sıfır tabanlı dizinini belirtir.

pData
Öğeyle ilişkilendirilecek işaretçiyi belirtir.

Dönüş Değeri

LB_ERR hata oluşursa.

Açıklamalar

Öğeler eklendikçe veya kaldırıldıkçe öğenin liste kutusu içindeki göreli konumu değişebilse de, bu işaretçi liste kutusunun ömrü boyunca geçerli kalır. Bu nedenle, kutunun içindeki öğenin dizini değişebilir, ancak işaretçi güvenilir kalır.

Örnek

// 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

Liste kutusundaki öğelerin yüksekliğini ayarlar.

int SetItemHeight(
    int nIndex,
    UINT cyItemHeight);

Parametreler

nIndex
Liste kutusundaki öğenin sıfır tabanlı dizinini belirtir. Bu parametre yalnızca liste kutusunda LBS_OWNERDRAWVARIABLE stil varsa kullanılır; aksi takdirde 0 olarak ayarlanmalıdır.

cyItemHeight
Öğenin yüksekliğini piksel cinsinden belirtir.

Dönüş Değeri

LB_ERR dizin veya yükseklik geçersizse.

Açıklamalar

Liste kutusunda LBS_OWNERDRAWVARIABLE stil varsa, bu işlev tarafından nIndexbelirtilen öğenin yüksekliğini ayarlar. Aksi takdirde, bu işlev liste kutusundaki tüm öğelerin yüksekliğini ayarlar.

Örnek

// 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

Bu liste kutusu için yerel ayar tanımlayıcısını ayarlar.

LCID SetLocale(LCID nNewLocale);

Parametreler

nNewLocale
Liste kutusu için ayarlanacağı yeni yerel ayar tanımlayıcısı (LCID) değeri.

Dönüş Değeri

Bu liste kutusu için önceki yerel ayar tanımlayıcısı (LCID) değeri.

Açıklamalar

Çağrılmazsa SetLocale , varsayılan yerel ayar sistemden alınır. Bu sistem varsayılan yerel ayarı, Denetim Masası Bölgesel (veya Uluslararası) uygulaması kullanılarak değiştirilebilir.

Örnek

// 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

Birden çok seçimli liste kutusunda bir dize seçer.

int SetSel(
    int nIndex,
    BOOL bSelect = TRUE);

Parametreler

nIndex
Ayarlanacak dizenin sıfır tabanlı dizinini içerir. -1 ise, seçimi değerine bağlı bSelectolarak tüm dizelere eklenir veya bu dizelerden kaldırılır.

bSelect
Seçimin nasıl ayarlandığını belirtir. ise bSelect TRUE, dize seçilir ve vurgulanır; ise FALSEvurgu kaldırılır ve dize artık seçilmez. Belirtilen dize varsayılan olarak seçili ve vurgulanmış.

Dönüş Değeri

LB_ERR hata oluşursa.

Açıklamalar

Bu üye işlevini yalnızca çoklu seçim liste kutularıyla kullanın.

Tek seçimli liste kutusundan bir öğe seçmek için kullanın CListBox::SetCurSel.

Örnek

// 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

Liste kutusunda sekme durağı konumlarını ayarlar.

void SetTabStops();
BOOL SetTabStops(const int& cxEachStop);

BOOL SetTabStops(
    int nTabStops,
    LPINT rgTabStops);

Parametreler

cxEachStop
Sekme durakları her cxEachStop iletişim kutusunda ayarlanır. İletişim biriminin açıklaması için bkz rgTabStops .

nTabStops
Liste kutusunda yer alan sekme duraklarının sayısını belirtir.

rgTabStops
İletişim birimlerindeki sekme durağı konumlarını içeren bir tamsayı dizisinin ilk üyesine işaret eder. İletişim kutusu birimi yatay veya dikey bir uzaklıktır. Bir yatay iletişim kutusu birimi, geçerli iletişim kutusu temel genişlik biriminin dörtte birine eşittir ve bir dikey iletişim kutusu birimi geçerli iletişim kutusu temel yükseklik biriminin sekizde birine eşittir. İletişim kutusu temel birimleri, geçerli sistem yazı tipinin yüksekliğine ve genişliğine göre hesaplanır. GetDialogBaseUnits Windows işlevi geçerli iletişim kutusu temel birimlerini piksel cinsinden döndürür. Sekme durakları artan düzende sıralanmalıdır; geri sekmelerine izin verilmez.

Dönüş Değeri

Tüm sekmeler ayarlandıysa sıfır olmayan; aksi takdirde 0.

Açıklamalar

Sekme duraklarını varsayılan 2 iletişim birimi boyutuna ayarlamak için bu üye işlevinin parametresiz sürümünü çağırın. Sekme duraklarını 2'den farklı bir boyuta ayarlamak için bağımsız değişkeniyle sürümü çağırın cxEachStop .

Sekme duraklarını bir boyut dizisine ayarlamak için ve nTabStops bağımsız değişkenleriyle rgTabStops sürümünü kullanın. içindeki rgTabStopsher değer için, tarafından nTabStopsbelirtilen sayıya kadar bir sekme durağı ayarlanır.

Üye işlevine yapılan SetTabStops bir çağrıyı yanıtlamak için liste kutusunun stille LBS_USETABSTOPS oluşturulmuş olması gerekir.

Örnek

// 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

Belirli bir liste kutusu öğesinin görünür olmasını sağlar.

int SetTopIndex(int nIndex);

Parametreler

nIndex
Liste kutusu öğesinin sıfır tabanlı dizinini belirtir.

Dönüş Değeri

Başarılı olursa veya LB_ERR hata oluşursa sıfır.

Açıklamalar

Sistem, tarafından belirtilen nIndex öğe liste kutusunun en üstünde görünene veya kaydırma aralığı üst sınırına ulaşılana kadar liste kutusunu kaydırıyor.

Örnek

// Set the first visible item in the list box to be the middle item
m_myListBox.SetTopIndex(m_myListBox.GetCount() / 2);

CListBox::VKeyToItem

Liste kutusunun üst penceresi liste kutusundan bir WM_VKEYTOITEM ileti aldığında çerçeve tarafından çağrılır.

virtual int VKeyToItem(
    UINT nKey,
    UINT nIndex);

Parametreler

nKey
Kullanıcının bastığı anahtarın sanal anahtar kodu. Standart sanal anahtar kodlarının listesi için bkz. Winuser.h

nIndex
Liste kutusu şapka işaretinin geçerli konumu.

Dönüş Değeri

Başka eylem olmadan - 2, varsayılan eylem için - 1 veya tuş vuruşu için varsayılan eylemin gerçekleştirildiği liste kutusu öğesinin dizinini belirtmek için zorunlu olmayan bir sayı döndürür.

Açıklamalar

İleti WM_VKEYTOITEM , bir WM_KEYDOWN ileti aldığında liste kutusu tarafından gönderilir, ancak yalnızca liste kutusu aşağıdakilerin ikisini birden karşılarsa gönderilir:

Bu işlevi hiçbir zaman kendiniz çağırmamalısınız. Klavye iletilerinin kendi özel işlemesini sağlamak için bu işlevi geçersiz kılın.

Çerçeveye geçersiz kılma işleminizin hangi eylemi gerçekleştirdiğini bildirmek için bir değer döndürmelisiniz. - 2 dönüş değeri, uygulamanın öğeyi seçmenin tüm yönlerini işlediğini ve liste kutusu tarafından başka eylem gerektirmediğini gösterir. - 2 değerini döndürmeden önce, seçimi ayarlayabilir veya şapka işaretini veya her ikisini birden taşıyabilirsiniz. Seçimi ayarlamak için veya SetSelkullanınSetCurSel. Şapka işaretini taşımak için kullanın SetCaretIndex.

- 1 dönüş değeri, liste kutusunun tuş vuruşlarına yanıt olarak varsayılan eylemi gerçekleştirmesi gerektiğini gösterir. Varsayılan uygulama - 1 döndürür.

0 veya daha büyük bir dönüş değeri, liste kutusundaki bir öğenin dizinini belirtir ve liste kutusunun verilen öğedeki tuş vuruşu için varsayılan eylemi gerçekleştirmesi gerektiğini belirtir.

Örnek

// 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;
}

Ayrıca bkz.

MFC Örneği CTRLTEST
CWnd Sınıf
Hiyerarşi Grafiği
CWnd Sınıf
CButton Sınıf
CComboBox Sınıf
CEdit Sınıf
CScrollBar Sınıf
CStatic Sınıf