Cara Menggunakan Area Kerja Tampilan Daftar
Topik ini menunjukkan cara bekerja dengan area kerja tampilan daftar. Area kerja adalah area virtual persegi panjang yang dapat digunakan untuk mengatur item dalam kontrol tampilan daftar. Area kerja bukan jendela dan tidak dapat memiliki batas yang terlihat. Secara default, kontrol tampilan daftar tidak memiliki area kerja. Dengan membuat area kerja, Anda dapat membuat batas kosong di sebelah kiri, atas, atau kanan item atau menyebabkan bilah gulir horizontal ditampilkan ketika biasanya tidak akan ada.
Apa yang perlu Anda ketahui
Teknologi
Prasyarat
- C/C++
- Pemrograman Antarmuka Pengguna Windows
Petunjuk
Membuat Area Kerja
Contoh kode C++ berikut menunjukkan cara membuat area kerja dengan batas kosong 25 piksel di sisi atas, kiri, dan kanannya.
void SetWorkAreas1(HWND hWndListView)
{
#define EMPTY_SPACE 25
RECT rcClient;
GetClientRect(hWndListView, &rcClient);
rcClient.left += EMPTY_SPACE;
rcClient.top += EMPTY_SPACE;
rcClient.right -= (EMPTY_SPACE * 2);
SendMessage(hWndListView, LVM_SETWORKAREAS, 1, (LPARAM)&rcClient);
return;
}
Membuat Beberapa Area Kerja
Contoh kode C++ berikut menunjukkan cara membuat dua area kerja dalam kontrol. Setiap area kerja menggunakan sekitar setengah dari area klien, dan dikelilingi oleh batas kosong 25 piksel.
void SetWorkAreas2(HWND hWndListView)
{
#define EMPTY_SPACE 25
RECT rcClient;
RECT rcWork[2];
GetClientRect(hWndListView, &rcClient);
rcWork[0].left = rcClient.left + EMPTY_SPACE;
rcWork[0].top = rcClient.top + EMPTY_SPACE;
rcWork[0].right = (rcClient.right/2) - EMPTY_SPACE;
rcWork[0].bottom = rcClient.bottom;
rcWork[1].left = (rcClient.right/2) + EMPTY_SPACE;
rcWork[1].top = rcClient.top + EMPTY_SPACE;
rcWork[1].right = rcClient.right - EMPTY_SPACE;
rcWork[1].bottom = rcClient.bottom;
SendMessage(hWndListView, LVM_SETWORKAREAS, 2, (LPARAM)rcWork);
return;
}
Tentukan Area Kerja tempat Item Berada
Salah satu cara untuk menentukan area kerja mana yang dimiliki item adalah dengan melakukan hal berikut:
- Ambil daftar koordinat semua area kerja dalam kontrol tampilan daftar.
- Ambil koordinat item.
- Tentukan apakah koordinat item berada dalam koordinat salah satu area kerja.
Fungsi yang ditentukan aplikasi dalam contoh kode C++ berikut mengembalikan indeks area kerja tempat item berada. Jika fungsi gagal, fungsi akan mengembalikan –1. Jika fungsi berhasil, tetapi item tidak berada di dalam salah satu area kerja, fungsi mengembalikan 0, karena semua item yang tidak berada di dalam area kerja secara otomatis menjadi anggota area kerja nol.
int GetItemWorkingArea(HWND hWndListView, int iItem)
{
UINT uWorkAreas = 0;
int nReturn = -1;
LPRECT pRects;
POINT pt;
if(!ListView_GetItemPosition(hWndListView, iItem, &pt))
return nReturn;
ListView_GetNumberOfWorkAreas(hWndListView, &uWorkAreas);
if(uWorkAreas)
{
pRects = (LPRECT)GlobalAlloc(GPTR, sizeof(RECT) * uWorkAreas);
if(pRects)
{
UINT i;
nReturn = 0;
ListView_GetWorkAreas(hWndListView, uWorkAreas, pRects);
for(i = 0; i < uWorkAreas; i++)
{
if(PtInRect((pRects + i), pt))
{
nReturn = i;
break;
}
}
GlobalFree((HGLOBAL)pRects);
}
}
return nReturn;
}
Topik terkait