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 CListBox
tü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 CDialog
tü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 stileLBS_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 stilineLBS_NOTIFY
sahip olduğunda gönderilir.ON_LBN_SELCHANGE
Liste kutusundaki seçim değişti. Seçim üye işlevi tarafındanCListBox::SetCurSel
değiştirilirse bu bildirim gönderilmez. Bu bildirim yalnızca stili olan bir liste kutusu içinLBS_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 birWM_CHAR
ileti alır.ON_WM_VKEYTOITEM
StileLBS_WANTKEYBOARDINPUT
sahip bir liste kutusu birWM_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
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 SetSel
kullanı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ınCreate
CListBox
.
Ö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ınCreate
CListBox
.
YürütülürkenCreate
, Windows , WM_CREATE
, WM_NCCALCSIZE
ve WM_GETMINMAXINFO
iletilerini liste kutusu denetimine gönderirWM_NCCREATE
.
Bu iletiler varsayılan olarak temel sınıftaki OnNcCreate
, OnCreate
, OnNcCalcSize
ve OnGetMinMaxInfo
üye işlevleri CWnd
tarafından işlenir. Varsayılan ileti işlemeyi genişletmek için öğesinden CListBox
bir 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 zamanWS_VISIBLE
GeneldeWS_DISABLED
NadirenWS_VSCROLL
Dikey kaydırma çubuğu eklemek içinWS_HSCROLL
Yatay kaydırma çubuğu eklemek içinWS_GROUP
Denetimleri gruplandırmak içinWS_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::GetStatus
açı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 nStartAfter
belirtilen öğ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 lpszFind
belirtilen 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 nIndexStart
belirtilen öğ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 lpszFind
eş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::SetAnchorIndex
bakı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::SetCaretIndex
bakı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 nIndex
belirtilen öğ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::SetLocale
bakı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::GetSelItems
bakı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 nMaxItems
belirtilen 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::GetText
bakı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_ERRSPACE
yeterli bellek olmadığı anlamına gelir.
Açıklamalar
öğesine çok sayıda öğe CListBox
eklemeden ö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 , InsertString
ve Dir
işlevlerinin mümkün olan en kısa süreyi alması için AddString
belirtilen 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 pt
belirtilen 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 pt
belirtilen 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::SetAnchorIndex
bakı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
CWnd
oluş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 nStartAfter
belirtilen öğ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 lpszItem
belirtilen 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 FALSE
vurgu 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 nIndex
belirtilen öğ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ı bSelect
olarak 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 FALSE
vurgu 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 rgTabStops
her değer için, tarafından nTabStops
belirtilen 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:
LBS_WANTKEYBOARDINPUT
Stil ayarlanmıştır.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.
Ç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 SetSel
kullanı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