Bagikan melalui


Kelas CHeaderCtrl

Menyediakan fungsionalitas kontrol header umum Windows.

Sintaks

class CHeaderCtrl : public CWnd

Anggota

Konstruktor Publik

Nama Deskripsi
CHeaderctrl::CHeaderctrl Membuat CHeaderCtrl objek.

Metode Publik

Nama Deskripsi
CHeaderCtrl::ClearAllFilters Menghapus semua filter untuk kontrol header.
CHeaderCtrl::ClearFilter Menghapus filter untuk kontrol header.
CHeaderCtrl::Create Membuat kontrol header dan melampirkannya ke CHeaderCtrl objek.
CHeaderCtrl::CreateDragImage Membuat versi transparan gambar item dalam kontrol header.
CHeaderCtrl::CreateEx Membuat kontrol header dengan gaya perluasan Windows yang ditentukan dan melampirkannya ke CListCtrl objek.
CHeaderCtrl::D eleteItem Menghapus item dari kontrol header.
CHeaderCtrl::D rawItem Menggambar item kontrol header yang ditentukan.
CHeaderCtrl::EditFilter Mulai mengedit filter kontrol header yang ditentukan.
CHeaderCtrl::GetBitmapMargin Mengambil lebar margin bitmap dalam kontrol header.
CHeaderCtrl::GetFocusedItem Mendapatkan pengidentifikasi item dalam kontrol header saat ini yang memiliki fokus.
CHeaderctrl::GetImageList Mengambil handel daftar gambar yang digunakan untuk menggambar item header dalam kontrol header.
CHeaderCtrl::GetItem Mengambil informasi tentang item dalam kontrol header.
CHeaderCtrl::GetItemCount Mengambil hitungan item dalam kontrol header.
CHeaderCtrl::GetItemDropDownRect Mendapatkan informasi persegi panjang pembatas untuk tombol drop-down yang ditentukan dalam kontrol header.
CHeaderCtrl::GetItemRect Mengambil persegi panjang pembatas untuk item tertentu dalam kontrol header.
CHeaderCtrl::GetOrderArray Mengambil urutan item kiri-ke-kanan dalam kontrol header.
CHeaderCtrl::GetOverflowRect Mendapatkan persegi panjang pembatas tombol luapan untuk kontrol header saat ini.
CHeaderctrl::Hittest Menentukan item header mana, jika ada, yang terletak pada titik tertentu.
CHeaderCtrl::InsertItem Sisipkan item baru ke kontrol header.
CHeaderCtrl::Layout Mengambil ukuran dan posisi kontrol header dalam persegi panjang tertentu.
CHeaderCtrl::OrderToIndex Mengambil nilai indeks untuk item berdasarkan urutannya dalam kontrol header.
CHeaderCtrl::SetBitmapMargin Mengatur lebar margin bitmap dalam kontrol header.
CHeaderCtrl::SetFilterChangeTimeout Mengatur interval batas waktu antara waktu perubahan terjadi di atribut filter dan postingan HDN_FILTERCHANGE pemberitahuan.
CHeaderCtrl::SetFocusedItem Mengatur fokus ke item header tertentu di kontrol header saat ini.
CHeaderCtrl::SetHotDivider Mengubah pembagi antara item header untuk menunjukkan seret dan letakkan item header secara manual.
CHeaderCtrl::SetImageList Menetapkan daftar gambar ke kontrol header.
CHeaderCtrl::SetItem Mengatur atribut item yang ditentukan dalam kontrol header.
CHeaderCtrl::SetOrderArray Mengatur urutan item kiri-ke-kanan dalam kontrol header.

Keterangan

Kontrol header adalah jendela yang biasanya diposisikan di atas sekumpulan kolom teks atau angka. Ini berisi judul untuk setiap kolom, dan dapat dibagi menjadi beberapa bagian. Pengguna dapat menyeret pembagi yang memisahkan bagian untuk mengatur lebar setiap kolom. Untuk ilustrasi kontrol header, lihat Kontrol Header.

Kontrol ini (dan oleh karena itu CHeaderCtrl kelas) hanya tersedia untuk program yang berjalan di bawah Windows 95/98 dan Windows NT versi 3.51 dan yang lebih baru.

Fungsionalitas yang ditambahkan untuk kontrol umum Windows 95/Internet Explorer 4.0 mencakup hal berikut:

  • Urutan kustom item header.

  • Item header seret dan letakkan, untuk menyusun ulang item header. Gunakan gaya HDS_DRAGDROP saat Anda membuat CHeaderCtrl objek.

  • Teks kolom header terus-menerus dapat dilihat selama mengubah ukuran kolom. Gunakan gaya HDS_FULLDRAG saat Anda membuat CHeaderCtrl objek.

  • Pelacakan panas header, yang menyoroti item header saat penunjuk mengarah ke atasnya. Gunakan gaya HDS_HOTTRACK saat Anda membuat CHeaderCtrl objek.

  • Dukungan daftar gambar. Item header dapat berisi gambar yang CImageList disimpan dalam objek atau teks.

Untuk informasi selengkapnya tentang menggunakan CHeaderCtrl, lihat Kontrol dan Menggunakan CHeaderCtrl.

Hierarki Warisan

CObject

CCmdTarget

CWnd

CHeaderCtrl

Persyaratan

Header: afxcmn.h

CHeaderctrl::CHeaderctrl

Membuat CHeaderCtrl objek.

CHeaderCtrl();

Contoh

// Declare a local CHeaderCtrl object.
CHeaderCtrl myHeaderCtrl;

// Declare a dynamic CHeaderCtrl object.
CHeaderCtrl *pmyHeaderCtrl = new CHeaderCtrl;

CHeaderCtrl::ClearAllFilters

Menghapus semua filter untuk kontrol header.

BOOL ClearAllFilters();

Tampilkan Nilai

TRUE jika metode ini berhasil; jika tidak, FALSE.

Keterangan

Metode ini mengimplementasikan perilaku pesan Win32 HDM_CLEARFILTER dengan nilai kolom -1, seperti yang dijelaskan dalam Windows SDK.

Contoh

m_myHeaderCtrl.ClearAllFilters();

CHeaderCtrl::ClearFilter

Menghapus filter untuk kontrol header.

BOOL ClearFilter(int nColumn);

Parameter

nColumn
Nilai kolom yang menunjukkan filter mana yang akan dihapus.

Tampilkan Nilai

TRUE jika metode ini berhasil; jika tidak, FALSE.

Keterangan

Metode ini mengimplementasikan perilaku pesan Win32 HDM_CLEARFILTER, seperti yang dijelaskan dalam Windows SDK.

Contoh

int iFilt = m_myHeaderCtrl.ClearFilter(1);

CHeaderCtrl::Create

Membuat kontrol header dan melampirkannya ke CHeaderCtrl objek.

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

Parameter

dwStyle
Menentukan gaya kontrol header. Untuk deskripsi gaya kontrol header, lihat Gaya Kontrol Header di Windows SDK.

rect
Menentukan ukuran dan posisi kontrol header. Ini bisa berupa objek CRect atau struktur RECT .

pParentWnd
Menentukan jendela induk kontrol header, biasanya .CDialog Ini tidak boleh NULL.

Nid
Menentukan ID kontrol header.

Tampilkan Nilai

Bukan nol jika inisialisasi berhasil; jika tidak, nol.

Keterangan

Anda membuat CHeaderCtrl objek dalam dua langkah. Pertama, panggil konstruktor lalu panggil Create, yang membuat kontrol header dan melampirkannya ke CHeaderCtrl objek.

Selain gaya kontrol header, Anda dapat menggunakan gaya kontrol umum berikut untuk menentukan bagaimana kontrol header memosisikan dan mengubah ukurannya sendiri (lihat Gaya Kontrol Umum untuk informasi selengkapnya):

  • CCS_BOTTOM Menyebabkan kontrol memosisikan dirinya di bagian bawah area klien jendela induk dan mengatur lebarnya agar sama dengan lebar jendela induk.

  • CCS_NODIVIDER Mencegah sorotan dua piksel digambar di bagian atas kontrol.

  • CCS_NOMOVEY Menyebabkan kontrol mengubah ukuran dan memindahkan dirinya secara horizontal, tetapi tidak secara vertikal, sebagai respons terhadap pesan WM_SIZE. Jika gaya CCS_NORESIZE digunakan, gaya ini tidak berlaku. Kontrol header memiliki gaya ini secara default.

  • CCS_NOPARENTALIGN Mencegah kontrol berpindah secara otomatis ke bagian atas atau bawah jendela induk. Sebaliknya, kontrol mempertahankan posisinya di dalam jendela induk meskipun perubahan pada ukuran jendela induk. Jika gaya CCS_TOP atau CCS_BOTTOM juga digunakan, tinggi disesuaikan ke default, tetapi posisi dan lebar tetap tidak berubah.

  • CCS_NORESIZE Mencegah kontrol menggunakan lebar dan tinggi default saat mengatur ukuran awal atau ukuran baru. Sebaliknya, kontrol menggunakan lebar dan tinggi yang ditentukan dalam permintaan pembuatan atau ukuran.

  • CCS_TOP Menyebabkan kontrol memosisikan dirinya di bagian atas area klien jendela induk dan mengatur lebar agar sama dengan lebar jendela induk.

Anda juga dapat menerapkan gaya jendela berikut ke kontrol header (lihat Gaya Jendela untuk informasi selengkapnya):

  • WS_CHILD Membuat jendela anak. Tidak dapat digunakan dengan gaya WS_POPUP.

  • WS_VISIBLE Membuat jendela yang awalnya terlihat.

  • WS_DISABLED Membuat jendela yang awalnya dinonaktifkan.

  • WS_GROUP Menentukan kontrol pertama grup kontrol tempat pengguna dapat berpindah dari satu kontrol ke kontrol berikutnya dengan tombol panah. Semua kontrol yang ditentukan dengan gaya WS_GROUP setelah kontrol pertama milik grup yang sama. Kontrol berikutnya dengan gaya WS_GROUP mengakhiri grup gaya dan memulai grup berikutnya (yaitu, satu grup berakhir di mana grup berikutnya dimulai).

  • WS_TABSTOP Menentukan salah satu dari sejumlah kontrol yang dapat dipindahkan pengguna dengan menggunakan kunci TAB. Tombol TAB memindahkan pengguna ke kontrol berikutnya yang ditentukan oleh gaya WS_TABSTOP.

Jika Anda ingin menggunakan gaya jendela yang diperluas dengan kontrol Anda, panggil CreateEx alih-alih Create.

Contoh

// pParentWnd is a pointer to the parent window.
m_myHeaderCtrl.Create(WS_CHILD | WS_VISIBLE | HDS_HORZ,
                      CRect(10, 10, 600, 50), pParentWnd, 1);

CHeaderCtrl::CreateEx

Membuat kontrol (jendela anak) dan mengaitkannya dengan CHeaderCtrl objek.

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

Parameter

dwExStyle
Menentukan gaya kontrol yang diperluas yang sedang dibuat. Untuk daftar gaya Windows yang diperluas, lihat parameter dwExStyle untuk CreateWindowEx di Windows SDK.

dwStyle
Gaya kontrol header. Untuk deskripsi gaya kontrol header, lihat Gaya Kontrol Header di Windows SDK. Lihat Membuat untuk daftar gaya tambahan.

rect
Referensi ke struktur RECT yang menjelaskan ukuran dan posisi jendela yang akan dibuat, dalam koordinat klien pParentWnd.

pParentWnd
Penunjuk ke jendela yang merupakan induk kontrol.

Nid
ID jendela anak kontrol.

Tampilkan Nilai

Bukan nol jika berhasil; jika tidak, 0.

Keterangan

Gunakan CreateEx alih-alih Create menerapkan gaya Windows yang diperluas, yang ditentukan oleh preface gaya windows yang diperluas WS_EX_.

CHeaderCtrl::CreateDragImage

Membuat versi transparan gambar item dalam kontrol header.

CImageList* CreateDragImage(int nIndex);

Parameter

nIndex
Indeks berbasis nol item dalam kontrol header. Gambar yang ditetapkan ke item ini adalah dasar untuk gambar transparan.

Tampilkan Nilai

Penunjuk ke objek CImageList jika berhasil; jika tidak, NULL. Daftar yang dikembalikan hanya berisi satu gambar.

Keterangan

Fungsi anggota ini mengimplementasikan perilaku pesan Win32 HDM_CREATEDRAGIMAGE, seperti yang dijelaskan dalam Windows SDK. Ini disediakan untuk mendukung seret dan letakkan item header.

Objek CImageList tempat titik penunjuk yang dikembalikan adalah objek sementara dan dihapus dalam pemrosesan waktu menganggur berikutnya.

CHeaderCtrl::D eleteItem

Menghapus item dari kontrol header.

BOOL DeleteItem(int nPos);

Parameter

nPos
Menentukan indeks berbasis nol item yang akan dihapus.

Tampilkan Nilai

Bukan nol jika berhasil; jika tidak, 0.

Contoh

int nCount = m_myHeaderCtrl.GetItemCount();

// Delete all of the items.
for (int i = 0; i < nCount; i++)
{
   m_myHeaderCtrl.DeleteItem(0);
}

CHeaderCtrl::D rawItem

Dipanggil oleh kerangka kerja saat aspek visual kontrol header gambar pemilik berubah.

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

Parameter

lpDrawItemStruct
Penunjuk ke struktur DRAWITEMSTRUCT yang menjelaskan item yang akan dicat.

Keterangan

Anggota itemAction DRAWITEMSTRUCT struktur mendefinisikan tindakan menggambar yang akan dilakukan.

Secara default, fungsi anggota ini tidak melakukan apa pun. Ambil alih fungsi anggota ini untuk mengimplementasikan gambar untuk objek gambar CHeaderCtrl pemilik.

Aplikasi harus memulihkan semua objek antarmuka perangkat grafis (GDI) yang dipilih untuk konteks tampilan yang disediakan dalam lpDrawItemStruct sebelum fungsi anggota ini berakhir.

Contoh

// NOTE: CMyHeaderCtrl is a class derived from CHeaderCtrl.
// The CMyHeaderCtrl object was created as follows:
//
//   CMyHeaderCtrl m_myHeader;
//   myHeader.Create(WS_CHILD | WS_VISIBLE | HDS_HORZ,
//      CRect(10, 10, 600, 50), pParentWnd, 1);

// This example implements the DrawItem method for a
// CHeaderCtrl-derived class that draws every item as a
// 3D button using the text color red.
void CMyHeaderCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
   // This code only works with header controls.
   ASSERT(lpDrawItemStruct->CtlType == ODT_HEADER);

   HDITEM hdi;
   const int c_cchBuffer = 256;
   TCHAR lpBuffer[c_cchBuffer];

   hdi.mask = HDI_TEXT;
   hdi.pszText = lpBuffer;
   hdi.cchTextMax = c_cchBuffer;

   GetItem(lpDrawItemStruct->itemID, &hdi);

   // Draw the button frame.
   ::DrawFrameControl(lpDrawItemStruct->hDC,
                      &lpDrawItemStruct->rcItem, DFC_BUTTON, DFCS_BUTTONPUSH);

   // Draw the items text using the text color red.
   COLORREF crOldColor = ::SetTextColor(lpDrawItemStruct->hDC,
                                        RGB(255, 0, 0));
   ::DrawText(lpDrawItemStruct->hDC, lpBuffer,
              (int)_tcsnlen(lpBuffer, c_cchBuffer),
              &lpDrawItemStruct->rcItem, DT_SINGLELINE | DT_VCENTER | DT_CENTER);
   ::SetTextColor(lpDrawItemStruct->hDC, crOldColor);
}

CHeaderCtrl::EditFilter

Mulai mengedit filter kontrol header yang ditentukan.

BOOL EditFilter(
    int nColumn,
    BOOL bDiscardChanges);

Parameter

nColumn
Kolom yang akan diedit.

bDiscardChanges
Nilai yang menentukan cara menangani perubahan pengeditan pengguna jika pengguna sedang dalam proses mengedit filter saat pesan HDM_EDITFILTER dikirim.

Tentukan TRUE untuk membuang perubahan yang dibuat oleh pengguna, atau FALSE untuk menerima perubahan yang dibuat oleh pengguna.

Tampilkan Nilai

TRUE jika metode ini berhasil; jika tidak, FALSE.

Keterangan

Metode ini mengimplementasikan perilaku pesan Win32 HDM_EDITFILTER, seperti yang dijelaskan di Windows SDK.

Contoh

int iFilter = m_myHeaderCtrl.EditFilter(1, TRUE);

CHeaderCtrl::GetBitmapMargin

Mengambil lebar margin bitmap dalam kontrol header.

int GetBitmapMargin() const;

Tampilkan Nilai

Lebar margin bitmap dalam piksel.

Keterangan

Fungsi anggota ini mengimplementasikan perilaku pesan Win32 HDM_GETBITMAPMARGIN, seperti yang dijelaskan dalam Windows SDK.

Contoh

int iMargin = m_myHeaderCtrl.GetBitmapMargin();

CHeaderCtrl::GetFocusedItem

Mendapatkan indeks item yang memiliki fokus dalam kontrol header saat ini.

int GetFocusedItem() const;

Tampilkan Nilai

Indeks berbasis nol dari item header yang memiliki fokus.

Keterangan

Metode ini mengirim pesan HDM_GETFOCUSEDITEM , yang dijelaskan dalam Windows SDK.

Contoh

Contoh kode pertama mendefinisikan variabel, m_headerCtrl, yang digunakan untuk mengakses kontrol header saat ini. Variabel ini digunakan dalam contoh berikutnya.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

Contoh kode berikutnya menunjukkan SetFocusedItem metode dan GetFocusedItem . Di bagian kode sebelumnya, kami membuat kontrol header dengan lima kolom. Namun, Anda dapat menyeret pemisah kolom sehingga kolom tidak terlihat. Contoh berikut mengatur lalu mengonfirmasi header kolom terakhir sebagai item fokus.

void CNVC_MFC_CHeaderCtrl_s4Dlg::OnXSetfocuseditem()
{
   if (controlCreated == FALSE)
   {
      MessageBox(_T("Header control has not been created yet."));
      return;
   }

   // Check that we get the value we set.
   int item = m_headerCtrl.GetItemCount() - 1;
   m_headerCtrl.SetFocusedItem(item);
   int itemGet = m_headerCtrl.GetFocusedItem();
   CString str = _T("Set: focused item = %d\nGet: focused item = %d");
   str.Format(str, item, itemGet);
   MessageBox(str, _T("Set/GetFocused Item"));
}

CHeaderctrl::GetImageList

Mengambil handel daftar gambar yang digunakan untuk menggambar item header dalam kontrol header.

CImageList* GetImageList() const;

Tampilkan Nilai

Penunjuk ke objek CImageList .

Keterangan

Fungsi anggota ini mengimplementasikan perilaku pesan Win32 HDM_GETIMAGELIST, seperti yang dijelaskan dalam Windows SDK. Objek CImageList tempat titik penunjuk yang dikembalikan adalah objek sementara dan dihapus dalam pemrosesan waktu menganggur berikutnya.

Contoh

// The new image list of the header control.
m_HeaderImages.Create(16, 16, ILC_COLOR, 2, 2);
m_HeaderImages.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
m_HeaderImages.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
m_HeaderImages.Add(AfxGetApp()->LoadIcon(IDI_ICON3));

ASSERT(m_myHeaderCtrl.GetImageList() == NULL);

m_myHeaderCtrl.SetImageList(&m_HeaderImages);
ASSERT(m_myHeaderCtrl.GetImageList() == &m_HeaderImages);

CHeaderCtrl::GetItem

Mengambil informasi tentang item kontrol header.

BOOL GetItem(
    int nPos,
    HDITEM* pHeaderItem) const;

Parameter

nPos
Menentukan indeks berbasis nol item yang akan diambil.

pHeaderItem
Penunjuk ke struktur HDITEM yang menerima item baru. Struktur ini digunakan dengan InsertItem fungsi anggota dan SetItem . Setiap bendera yang diatur dalam mask elemen memastikan bahwa nilai dalam elemen yang sesuai diisi dengan benar setelah pengembalian. mask Jika elemen diatur ke nol, nilai dalam elemen struktur lainnya tidak ada artinya.

Tampilkan Nilai

Bukan nol jika berhasil; jika tidak, 0.

Contoh

LPCTSTR lpszmyString = _T("column 2");
LPCTSTR lpszmyString2 = _T("vertical 2");

// Find the item whose text matches lpszmyString, and
// replace it with lpszmyString2.
int i, nCount = m_myHeaderCtrl.GetItemCount();
HDITEM hdi;
enum
{
   sizeOfBuffer = 256
};
TCHAR lpBuffer[sizeOfBuffer];
bool fFound = false;

hdi.mask = HDI_TEXT;
hdi.pszText = lpBuffer;
hdi.cchTextMax = sizeOfBuffer;

for (i = 0; !fFound && (i < nCount); i++)
{
   m_myHeaderCtrl.GetItem(i, &hdi);

   if (_tcsncmp(hdi.pszText, lpszmyString, sizeOfBuffer) == 0)
   {
      _tcscpy_s(hdi.pszText, sizeOfBuffer, lpszmyString2);
      m_myHeaderCtrl.SetItem(i, &hdi);
      fFound = true;
   }
}

CHeaderCtrl::GetItemCount

Mengambil hitungan item dalam kontrol header.

int GetItemCount() const;

Tampilkan Nilai

Jumlah item kontrol header jika berhasil; jika tidak - 1.

Contoh

Lihat contoh untuk CHeaderCtrl::D eleteItem.

CHeaderCtrl::GetItemDropDownRect

Mendapatkan persegi panjang pembatas tombol drop-down untuk item header di kontrol header saat ini.

BOOL GetItemDropDownRect(
    int iItem,
    LPRECT lpRect) const;

Parameter

iItem
[di] Indeks berbasis nol item header yang gayanya HDF_SPLITBUTTON. Untuk informasi selengkapnya, lihat fmt anggota struktur HDITEM .

lpRect
[out] Penunjuk ke struktur RECT untuk menerima informasi persegi panjang pembatas.

Tampilkan Nilai

TRUE jika fungsi ini berhasil; jika tidak, FALSE.

Keterangan

Metode ini mengirim pesan HDM_GETITEMDROPDOWNRECT , yang dijelaskan dalam Windows SDK.

Contoh

Contoh kode pertama mendefinisikan variabel, m_headerCtrl, yang digunakan untuk mengakses kontrol header saat ini. Variabel ini digunakan dalam contoh berikutnya.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

Contoh kode berikutnya menunjukkan GetItemDropDownRect metode . Di bagian kode sebelumnya, kami membuat kontrol header dengan lima kolom. Contoh kode berikut menggambar persegi panjang 3D di sekitar lokasi pada kolom pertama yang dicadangkan untuk tombol drop-down header.

void CNVC_MFC_CHeaderCtrl_s4Dlg::OnXGetitemdropdownrect()
{
   if (controlCreated == FALSE)
   {
      MessageBox(_T("Header control has not been created yet."));
      return;
   }

   // Get the dropdown rect for the first column.
   CRect rect;
   BOOL bRetVal = m_headerCtrl.GetItemDropDownRect(0, &rect);
   if (bRetVal == TRUE)
   {
      // Draw around the dropdown rect a rectangle that has red
      // left and top sides, and blue right and bottom sides.
      CDC *pDC = m_headerCtrl.GetDC();
      pDC->Draw3dRect(rect, RGB(255, 0, 0), RGB(0, 0, 255));
   }
}

CHeaderCtrl::GetItemRect

Mengambil persegi panjang pembatas untuk item tertentu dalam kontrol header.

BOOL GetItemRect(
    int nIndex,
    LPRECT lpRect) const;

Parameter

nIndex
Indeks berbasis nol dari item kontrol header.

lpRect
Penunjuk ke alamat struktur RECT yang menerima informasi persegi panjang pembatas.

Tampilkan Nilai

Bukan nol jika berhasil; jika tidak, 0.

Keterangan

Metode ini mengimplementasikan perilaku pesan Win32 HDM_GETITEMRECT, seperti yang dijelaskan di Windows SDK.

CHeaderCtrl::GetOrderArray

Mengambil urutan item kiri-ke-kanan dalam kontrol header.

BOOL GetOrderArray(
    LPINT piArray,
    int iCount);

Parameter

piArray
Penunjuk ke alamat buffer yang menerima nilai indeks item dalam kontrol header, dalam urutan muncul dari kiri ke kanan.

iCount
Jumlah item kontrol header. Harus non-negatif.

Tampilkan Nilai

Bukan nol jika berhasil; jika tidak, 0.

Keterangan

Fungsi anggota ini mengimplementasikan perilaku pesan Win32 HDM_GETORDERARRAY, seperti yang dijelaskan dalam Windows SDK. Ini disediakan untuk mendukung pengurutan item header.

Contoh

// Reverse the order of the items in the header control.
// (i.e. make the first item the last one, the last item
// the first one, and so on ...).
int nCount = m_myHeaderCtrl.GetItemCount();
LPINT pnOrder = (LPINT)malloc(nCount * sizeof(int));
ASSERT(pnOrder != NULL);
if (NULL != pnOrder)
{
   m_myHeaderCtrl.GetOrderArray(pnOrder, nCount);

   int i, j, nTemp;
   for (i = 0, j = nCount - 1; i < j; i++, j--)
   {
      nTemp = pnOrder[i];
      pnOrder[i] = pnOrder[j];
      pnOrder[j] = nTemp;
   }

   m_myHeaderCtrl.SetOrderArray(nCount, pnOrder);
   free(pnOrder);
}

CHeaderCtrl::GetOverflowRect

Mendapatkan persegi panjang pembatas dari tombol luapan kontrol header saat ini.

BOOL GetOverflowRect(LPRECT lpRect) const;

Parameter

lpRect
[out] Penunjuk ke struktur RECT yang menerima informasi persegi panjang pembatas.

Tampilkan Nilai

TRUE jika fungsi ini berhasil; jika tidak, FALSE.

Keterangan

Jika kontrol header berisi lebih banyak item daripada yang dapat ditampilkan secara bersamaan, kontrol dapat menampilkan tombol luapan yang menggulir ke item yang tidak terlihat. Kontrol header harus memiliki gaya HDS_OVERFLOW dan HDF_SPLITBUTTON untuk menampilkan tombol luapan. Persegi panjang pembatas mengapit tombol luapan dan hanya ada saat tombol luapan ditampilkan. Untuk informasi selengkapnya, lihat Gaya Kontrol Header.

Metode ini mengirim pesan HDM_GETOVERFLOWRECT , yang dijelaskan dalam Windows SDK.

Contoh

Contoh kode pertama mendefinisikan variabel, m_headerCtrl, yang digunakan untuk mengakses kontrol header saat ini. Variabel ini digunakan dalam contoh berikutnya.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

Contoh kode berikutnya menunjukkan GetOverflowRect metode . Di bagian kode sebelumnya, kami membuat kontrol header dengan lima kolom. Namun, Anda dapat menyeret pemisah kolom sehingga kolom tidak terlihat. Jika beberapa kolom tidak terlihat, kontrol header akan menggambar tombol luapan. Contoh kode berikut menggambar persegi panjang 3D di sekitar lokasi tombol luapan.

void CNVC_MFC_CHeaderCtrl_s4Dlg::OnXGetoverflowrect()
{
   if (controlCreated == FALSE)
   {
      MessageBox(_T("Header control has not been created yet."));
      return;
   }
   CRect rect;
   // Get the overflow rectangle.
   BOOL bRetVal = m_headerCtrl.GetOverflowRect(&rect);
   // Get the device context.
   CDC *pDC = m_headerCtrl.GetDC();
   // Draw around the overflow rect a rectangle that has red
   // left and top sides, and green right and bottom sides.
   pDC->Draw3dRect(rect, RGB(255, 0, 0), RGB(0, 255, 0));
}

CHeaderctrl::Hittest

Menentukan item header mana, jika ada, yang terletak pada titik tertentu.

int HitTest(LPHDHITTESTINFO* phdhti);

Parameter

phdhti
[masuk, keluar] Pointer ke struktur HDHITTESTINFO yang menentukan titik untuk menguji dan menerima hasil pengujian.

Tampilkan Nilai

Indeks berbasis nol dari item header, jika ada, pada posisi yang ditentukan; jika tidak, -1.

Keterangan

Metode ini mengirim pesan HDM_HITTEST , yang dijelaskan dalam Windows SDK.

Contoh

Contoh kode pertama mendefinisikan variabel, m_headerCtrl, yang digunakan untuk mengakses kontrol header saat ini. Variabel ini digunakan dalam contoh berikutnya.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

Contoh kode berikutnya menunjukkan HitTest metode . Di bagian sebelumnya dari contoh kode ini, kami membuat kontrol header dengan lima kolom. Namun, Anda dapat menyeret pemisah kolom sehingga kolom tidak terlihat. Contoh ini melaporkan indeks kolom jika terlihat dan -1 jika kolom tidak terlihat.

void CNVC_MFC_CHeaderCtrl_s4Dlg::OnXHittest()
{
   if (controlCreated == FALSE)
   {
      MessageBox(_T("Header control has not been created yet."));
      return;
   }
   // Initialize HDHITTESTINFO structure.
   HDHITTESTINFO hdHitIfo;
   memset(&hdHitIfo, 0, sizeof(HDHITTESTINFO));

   CString str;
   CRect rect;
   int iRetVal = -1;
   for (int i = 0; i < m_headerCtrl.GetItemCount(); i++)
   {
      m_headerCtrl.GetItemRect(i, &rect);
      hdHitIfo.pt = rect.CenterPoint();
      // The hit test depends on whether the header item is visible.
      iRetVal = m_headerCtrl.HitTest(&hdHitIfo);
      str.AppendFormat(_T("Item = %d, Hit item = %d\n"), i, iRetVal);
   }
   MessageBox(str, _T("Hit test results"));
}

CHeaderCtrl::InsertItem

Menyisipkan item baru ke dalam kontrol header pada indeks yang ditentukan.

int InsertItem(
    int nPos,
    HDITEM* phdi);

Parameter

nPos
Indeks berbasis nol dari item yang akan disisipkan. Jika nilainya nol, item disisipkan di awal kontrol header. Jika nilai lebih besar dari nilai maksimum, item disisipkan di akhir kontrol header.

phdi
Penunjuk ke struktur HDITEM yang berisi informasi tentang item yang akan disisipkan.

Tampilkan Nilai

Indeks item baru jika berhasil; jika tidak - 1.

Contoh

CString str;
HDITEM hdi;

hdi.mask = HDI_TEXT | HDI_WIDTH | HDI_FORMAT | HDI_IMAGE;
hdi.cxy = 100; // Make all columns 100 pixels wide.
hdi.fmt = HDF_STRING | HDF_CENTER;

// Insert 6 columns in the header control.
for (int i = 0; i < 6; i++)
{
   str.Format(TEXT("column %d"), i);
   hdi.pszText = str.GetBuffer(0);
   hdi.iImage = i % 3;

   m_myHeaderCtrl.InsertItem(i, &hdi);
}

CHeaderCtrl::Layout

Mengambil ukuran dan posisi kontrol header dalam persegi panjang tertentu.

BOOL Layout(HDLAYOUT* pHeaderLayout);

Parameter

pHeaderLayout
Penunjuk ke struktur HDLAYOUT , yang berisi informasi yang digunakan untuk mengatur ukuran dan posisi kontrol header.

Tampilkan Nilai

Bukan nol jika berhasil; jika tidak, 0.

Keterangan

Fungsi ini digunakan untuk menentukan dimensi yang sesuai untuk kontrol header baru yaitu menempati persegi panjang yang diberikan.

Contoh

HDLAYOUT hdl;
WINDOWPOS wpos;
RECT rc;

// Reposition the header control so that it is placed at
// the top of its parent window's client area.
m_myHeaderCtrl.GetParent()->GetClientRect(&rc);

hdl.prc = &rc;
hdl.pwpos = &wpos;
if (m_myHeaderCtrl.Layout(&hdl))
{
   m_myHeaderCtrl.SetWindowPos(
       CWnd::FromHandle(wpos.hwndInsertAfter),
       wpos.x,
       wpos.y,
       wpos.cx,
       wpos.cy,
       wpos.flags | SWP_SHOWWINDOW);
}

CHeaderCtrl::OrderToIndex

Mengambil nilai indeks untuk item berdasarkan urutannya dalam kontrol header.

int OrderToIndex(int nOrder) const;

Parameter

nOrder
Urutan berbasis nol yang muncul di kontrol header, dari kiri ke kanan.

Tampilkan Nilai

Indeks item, berdasarkan urutannya dalam kontrol header. Indeks dihitung dari kiri ke kanan, dimulai dengan 0.

Keterangan

Fungsi anggota ini mengimplementasikan perilaku makro Win32 HDM_ORDERTOINDEX, seperti yang dijelaskan dalam Windows SDK. Ini disediakan untuk mendukung pengurutan item header.

CHeaderCtrl::SetBitmapMargin

Mengatur lebar margin bitmap dalam kontrol header.

int SetBitmapMargin(int nWidth);

Parameter

nWidth
Lebar, ditentukan dalam piksel, dari margin yang mengelilingi bitmap dalam kontrol header yang ada.

Tampilkan Nilai

Lebar margin bitmap dalam piksel.

Keterangan

Fungsi anggota ini mengimplementasikan perilaku pesan Win32 HDM_SETBITMAPMARGIN, seperti yang dijelaskan dalam Windows SDK.

Contoh

int iOldMargin = m_myHeaderCtrl.SetBitmapMargin(15);

CHeaderCtrl::SetFilterChangeTimeout

Mengatur interval batas waktu antara waktu perubahan terjadi di atribut filter dan postingan pemberitahuan HDN_FILTERCHANGE .

int SetFilterChangeTimeout(DWORD dwTimeOut);

Parameter

dwTimeOut
Nilai batas waktu, dalam milidetik.

Tampilkan Nilai

Indeks kontrol filter yang sedang dimodifikasi.

Keterangan

Fungsi anggota ini mengimplementasikan perilaku pesan Win32 HDM_SETFILTERCHANGETIMEOUT, seperti yang dijelaskan dalam Windows SDK.

Contoh

int iFltr = m_myHeaderCtrl.SetFilterChangeTimeout(15);

CHeaderCtrl::SetFocusedItem

Mengatur fokus ke item header tertentu di kontrol header saat ini.

BOOL SetFocusedItem(int iItem);

Parameter

iItem
[di] Indeks berbasis nol dari item header.

Tampilkan Nilai

TRUE jika metode ini berhasil; jika tidak, FALSE.

Keterangan

Metode ini mengirim pesan HDM_SETFOCUSEDITEM , yang dijelaskan dalam Windows SDK.

Contoh

Contoh kode pertama mendefinisikan variabel, m_headerCtrl, yang digunakan untuk mengakses kontrol header saat ini. Variabel ini digunakan dalam contoh berikutnya.

CHeaderCtrl m_headerCtrl;
CSplitButton m_splitButton;

Contoh kode berikutnya menunjukkan SetFocusedItem metode dan GetFocusedItem . Di bagian kode sebelumnya, kami membuat kontrol header dengan lima kolom. Namun, Anda dapat menyeret pemisah kolom sehingga kolom tidak terlihat. Contoh berikut mengatur lalu mengonfirmasi header kolom terakhir sebagai item fokus.

void CNVC_MFC_CHeaderCtrl_s4Dlg::OnXSetfocuseditem()
{
   if (controlCreated == FALSE)
   {
      MessageBox(_T("Header control has not been created yet."));
      return;
   }

   // Check that we get the value we set.
   int item = m_headerCtrl.GetItemCount() - 1;
   m_headerCtrl.SetFocusedItem(item);
   int itemGet = m_headerCtrl.GetFocusedItem();
   CString str = _T("Set: focused item = %d\nGet: focused item = %d");
   str.Format(str, item, itemGet);
   MessageBox(str, _T("Set/GetFocused Item"));
}

CHeaderCtrl::SetHotDivider

Mengubah pembagi antara item header untuk menunjukkan seret dan letakkan item header secara manual.

int SetHotDivider(CPoint pt);
int SetHotDivider(int nIndex);

Parameter

Pt
Posisi penunjuk. Kontrol header menyoroti pembagi yang sesuai berdasarkan posisi penunjuk.

nIndex
Indeks pembagi yang disorot.

Tampilkan Nilai

Indeks pembagi yang disorot.

Keterangan

Fungsi anggota ini mengimplementasikan perilaku pesan Win32 HDM_SETHOTDIVIDER, seperti yang dijelaskan dalam Windows SDK. Ini disediakan untuk mendukung seret dan letakkan item header.

Contoh

void CMyHeaderCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
   SetHotDivider(point);

   CHeaderCtrl::OnMouseMove(nFlags, point);
}

CHeaderCtrl::SetImageList

Menetapkan daftar gambar ke kontrol header.

CImageList* SetImageList(CImageList* pImageList);

Parameter

pImageList
Penunjuk ke objek yang CImageList berisi daftar gambar yang akan ditetapkan ke kontrol header.

Tampilkan Nilai

Penunjuk ke objek CImageList yang sebelumnya ditetapkan ke kontrol header.

Keterangan

Fungsi anggota ini mengimplementasikan perilaku pesan Win32 HDM_SETIMAGELIST, seperti yang dijelaskan dalam Windows SDK. Objek CImageList tempat titik penunjuk yang dikembalikan adalah objek sementara dan dihapus dalam pemrosesan waktu menganggur berikutnya.

Contoh

Lihat contoh untuk CHeaderCtrl::GetImageList.

CHeaderCtrl::SetItem

Mengatur atribut item yang ditentukan dalam kontrol header.

BOOL SetItem(
    int nPos,
    HDITEM* pHeaderItem);

Parameter

nPos
Indeks berbasis nol dari item yang akan dimanipulasi.

pHeaderItem
Penunjuk ke struktur HDITEM yang berisi informasi tentang item baru.

Tampilkan Nilai

Bukan nol jika berhasil; jika tidak, 0.

Contoh

Lihat contoh untuk CHeaderCtrl::GetItem.

CHeaderCtrl::SetOrderArray

Mengatur urutan item kiri-ke-kanan dalam kontrol header.

BOOL SetOrderArray(
    int iCount,
    LPINT piArray);

Parameter

iCount
Jumlah item kontrol header.

piArray
Penunjuk ke alamat buffer yang menerima nilai indeks item dalam kontrol header, dalam urutan muncul dari kiri ke kanan.

Tampilkan Nilai

Bukan nol jika berhasil; jika tidak, 0.

Keterangan

Fungsi anggota ini mengimplementasikan perilaku makro Win32 HDM_SETORDERARRAY, seperti yang dijelaskan dalam Windows SDK. Ini disediakan untuk mendukung pengurutan item header.

Contoh

Lihat contoh untuk CHeaderCtrl::GetOrderArray.

Lihat juga

Kelas CWnd
Bagan Hierarki
Kelas CTabCtrl
Kelas CListCtrl
Kelas CImageList