Liste Denetimlerinde Çalışma Alanlarını Uygulama
Varsayılan olarak, liste denetimi tüm öğeleri standart kılavuz biçiminde düzenler. Ancak, liste öğelerini dikdörtgen gruplar halinde yerleştiren çalışma alanları olan başka bir yöntem de desteklenir. Çalışma alanlarını uygulayan bir liste denetiminin görüntüsü için bkz. Windows SDK'sında Liste Görünümü Denetimlerini Kullanma.
Dekont
Çalışma alanları yalnızca liste denetimi simge veya küçük simge modunda olduğunda görünür. Ancak, görünüm rapor veya liste moduna geçirilirse geçerli çalışma alanları korunur.
Çalışma alanları boş bir kenarlık (öğelerin solunda, üstünde ve/veya sağında) görüntülemek veya normalde bir tane olmadığında yatay kaydırma çubuğunun görüntülenmesine neden olmak için kullanılabilir. Diğer bir yaygın kullanım, öğelerin taşınabileceği veya bırakılabildiği birden çok çalışma alanı oluşturmaktır. Bu yöntemle, tek bir görünümde farklı anlamlara sahip alanlar oluşturabilirsiniz. Kullanıcı daha sonra öğeleri farklı bir alana yerleştirerek kategorilere ayırabilir. Buna örnek olarak, okuma/yazma dosyaları için bir alan ve salt okunur dosyalar için başka bir alan içeren bir dosya sistemi görünümü gösterilebilir. Bir dosya öğesi salt okunur alana taşınırsa, otomatik olarak salt okunur hale gelir. Bir dosyanın salt okunur alandan okuma/yazma alanına taşınması, dosyanın okunmasını/yazmasını sağlar.
CListCtrl
liste denetiminizde çalışma alanları oluşturmak ve yönetmek için çeşitli üye işlevleri sağlar. GetWorkAreas ve SetWorkAreas, liste denetiminiz için geçerli olarak uygulanan çalışma alanlarını depolayan bir nesne (veya RECT
yapı) dizisi CRect
alır ve ayarlar. Ayrıca, GetNumberOfWorkAreas liste denetiminiz için geçerli çalışma alanı sayısını (varsayılan olarak sıfır) alır.
Öğeler ve Çalışma Alanları
Bir çalışma alanı oluşturulduğunda, çalışma alanının içinde yer alan öğeler buna üye olur. Benzer şekilde, bir öğe bir çalışma alanına taşınırsa, taşındığı çalışma alanının bir üyesi olur. Bir öğe herhangi bir çalışma alanının içinde yer almazsa, otomatik olarak ilk (dizin 0) çalışma alanının üyesi olur. Bir öğe oluşturmak ve belirli bir çalışma alanına yerleştirilmesini istiyorsanız, öğeyi oluşturmanız ve ardından SetItemPosition çağrısıyla istenen çalışma alanına taşımanız gerekir. Aşağıdaki ikinci örnekte bu teknik gösterilmektedir.
Aşağıdaki örnek, bir liste denetiminde (rcWorkAreas
) her çalışma alanının çevresinde 10 piksel genişliğinde kenarlıkla eşit boyutta dört çalışma alanı (m_WorkAreaListCtrl
) uygular.
CSize size;
size = m_WorkAreaListCtrl.ApproximateViewRect();
size.cx += 100;
size.cy += 100;
CRect rcWorkAreas[4];
rcWorkAreas[0].SetRect(0, 0, (size.cx / 2) - 5, (size.cy / 2) - 5);
rcWorkAreas[1].SetRect((size.cx / 2) + 5, 0, size.cx, (size.cy / 2) - 5);
rcWorkAreas[2].SetRect(0, (size.cy / 2) + 5, (size.cx / 2) - 5, size.cy);
rcWorkAreas[3].SetRect((size.cx / 2) + 5, (size.cy / 2) + 5, size.cx, size.cy);
//set work areas
m_WorkAreaListCtrl.SetWorkAreas(4, rcWorkAreas);
Bir bölgedeki tüm öğeleri görüntülemek için gereken toplam alanın tahmininin alınması için ApproximateViewRect çağrısı yapıldı. Bu tahmin daha sonra dört bölgeye bölünür ve 5 piksel genişliğinde bir kenarlıkla doldurulur.
Sonraki örnek, var olan liste öğelerini her gruba (rcWorkAreas
) atar ve efekti tamamlamak için denetim görünümünü (m_WorkAreaListCtrl
) yeniler.
// set insertion points for each work area
CPoint rgptWork[4];
for (int i = 0; i < 4; i++)
{
rgptWork[i].x = rcWorkAreas[i].left + 10;
rgptWork[i].y = rcWorkAreas[i].top + 10;
}
// now move all the items to the different quadrants
for (int i = 0; i < 20; i++)
{
m_WorkAreaListCtrl.SetItemPosition(i, rgptWork[i % 4]);
}
// force the control to rearrange the shuffled items
m_WorkAreaListCtrl.Arrange(LVA_DEFAULT);