Bagikan melalui


CScrollView Kelas

A CView dengan kemampuan gulir.

Sintaks

class CScrollView : public CView

Anggota

Konstruktor yang Dilindungi

Nama Deskripsi
CScrollView::CScrollView Membuat CScrollView objek.

Metode Publik

Nama Deskripsi
CScrollView::CheckScrollBars Menunjukkan apakah tampilan gulir memiliki bilah gulir horizontal dan vertikal.
CScrollView::FillOutsideRect Mengisi area tampilan di luar area gulir.
CScrollView::GetDeviceScrollPosition Mendapatkan posisi gulir saat ini di unit perangkat.
CScrollView::GetDeviceScrollSizes Mendapatkan mode pemetaan saat ini, ukuran total, dan ukuran garis dan halaman tampilan yang dapat digulir. Ukuran ada di unit perangkat.
CScrollView::GetScrollPosition Mendapatkan posisi gulir saat ini di unit logis.
CScrollView::GetTotalSize Mendapatkan ukuran total tampilan gulir di unit logis.
CScrollView::ResizeParentToFit Menyebabkan ukuran tampilan menentukan ukuran bingkainya.
CScrollView::ScrollToPosition Menggulir tampilan ke titik tertentu, yang ditentukan dalam unit logis.
CScrollView::SetScaleToFitSize Menempatkan tampilan gulir ke mode skala-ke-pas.
CScrollView::SetScrollSizes Mengatur mode pemetaan tampilan gulir, ukuran total, dan jumlah gulir horizontal dan vertikal.

Keterangan

Anda dapat menangani pengguliran standar sendiri di kelas mana pun yang berasal dari CView dengan mengambil alih fungsi yang dipetakan OnHScroll pesan dan OnVScroll anggota. Tetapi CScrollView menambahkan fitur berikut ke kemampuannya CView :

  • Ini mengelola ukuran jendela dan viewport dan mode pemetaan.

  • Ini menggulir secara otomatis sebagai respons terhadap pesan bilah gulir.

  • Ini menggulir secara otomatis sebagai respons terhadap pesan dari keyboard, mouse yang tidak menggulir, atau roda IntelliMouse.

Untuk menggulir secara otomatis sebagai respons terhadap pesan dari keyboard, tambahkan WM_KEYDOWN pesan, dan uji untuk VK_DOWN, VK_PREV dan panggil SetScrollPos.

Anda dapat menangani roda mouse yang menggulir sendiri dengan mengesampingkan fungsi yang dipetakan OnMouseWheel pesan dan OnRegisteredMouseWheel anggota. Seperti halnya untuk CScrollView, fungsi anggota ini mendukung perilaku yang direkomendasikan untuk WM_MOUSEWHEEL, pesan rotasi roda.

Untuk memanfaatkan pengguliran otomatis, dapatkan kelas tampilan Anda dari CScrollView bukan dari CView. Saat tampilan pertama kali dibuat, jika Anda ingin menghitung ukuran tampilan yang dapat digulir berdasarkan ukuran dokumen, panggil SetScrollSizes fungsi anggota dari penimpaan Anda baik CView::OnInitialUpdate atau CView::OnUpdate. (Anda harus menulis kode Anda sendiri untuk mengkueri ukuran dokumen. Misalnya, lihat sampel Coretan.)

Panggilan ke SetScrollSizes fungsi anggota mengatur mode pemetaan tampilan, dimensi total tampilan gulir, dan jumlah untuk menggulir secara horizontal dan vertikal. Semua ukuran berada dalam unit logis. Ukuran logis tampilan biasanya dihitung dari data yang disimpan dalam dokumen, tetapi dalam beberapa kasus Anda mungkin ingin menentukan ukuran tetap. Untuk contoh kedua pendekatan, lihat CScrollView::SetScrollSizes.

Anda menentukan jumlah untuk menggulir secara horizontal dan vertikal dalam unit logis. Secara default, jika pengguna mengklik poros bilah gulir di luar kotak gulir, CScrollView menggulir "halaman." Jika pengguna mengklik panah gulir di salah satu akhir bilah gulir, CScrollView menggulir "garis." Secara default, halaman adalah 1/10 dari ukuran total tampilan; garis adalah 1/10 dari ukuran halaman. Ambil alih nilai default ini dengan meneruskan ukuran kustom dalam SetScrollSizes fungsi anggota. Misalnya, Anda dapat mengatur ukuran horizontal ke beberapa pecahan lebar ukuran total dan ukuran vertikal ke tinggi garis dalam font saat ini.

Alih-alih menggulir, CScrollView dapat secara otomatis menskalakan tampilan ke ukuran jendela saat ini. Dalam mode ini, tampilan tidak memiliki bilah gulir dan tampilan logis direntangkan atau menyusut agar sesuai dengan area klien jendela. Untuk menggunakan kemampuan scale-to-fit ini, panggil CScrollView::SetScaleToFitSize. (Panggil atau SetScaleToFitSize SetScrollSizes, tetapi tidak keduanya.)

OnDraw Sebelum fungsi anggota kelas tampilan turunan Anda dipanggil, CScrollView secara otomatis menyesuaikan asal viewport untuk CPaintDC objek konteks perangkat yang diteruskannya ke OnDraw.

Untuk menyesuaikan asal viewport untuk jendela gulir, CScrollView ambil alih CView::OnPrepareDC. Penyesuaian ini otomatis untuk CPaintDC konteks perangkat yang CScrollView diteruskan ke OnDraw, tetapi Anda harus memanggil CScrollView::OnPrepareDC diri Anda sendiri untuk konteks perangkat lain yang Anda gunakan, seperti CClientDC. Anda dapat mengambil alih CScrollView::OnPrepareDC untuk mengatur pena, warna latar belakang, dan atribut gambar lainnya, tetapi memanggil kelas dasar untuk melakukan penskalakan.

Bilah gulir dapat muncul di tiga tempat relatif terhadap tampilan, seperti yang diperlihatkan dalam kasus berikut:

  • Bilah gulir gaya jendela standar dapat diatur untuk tampilan menggunakan WS_HSCROLL dan WS_VSCROLL Gaya Windows.

  • Kontrol bilah gulir juga dapat ditambahkan ke bingkai yang berisi tampilan, dalam hal ini kerangka kerja meneruskan WM_HSCROLL dan WM_VSCROLL pesan dari jendela bingkai ke tampilan yang saat ini aktif.

  • Kerangka kerja juga meneruskan pesan gulir dari CSplitterWnd kontrol pemisah ke panel pemisah yang saat ini aktif (tampilan). Saat ditempatkan di CSplitterWnd dengan bilah gulir bersama, CScrollView objek akan menggunakan yang dibagikan daripada membuat sendiri.

Untuk informasi selengkapnya tentang menggunakan CScrollView, lihat Arsitektur Dokumen/Tampilan dan Kelas Tampilan Turunan yang Tersedia di MFC.

Hierarki Warisan

CObject

CCmdTarget

CWnd

CView

CScrollView

Persyaratan

Header: afxwin.h

CScrollView::CheckScrollBars

Panggil fungsi anggota ini untuk menentukan apakah tampilan gulir memiliki bilah horizontal dan vertikal.

void CheckScrollBars(
    BOOL& bHasHorzBar,
    BOOL& bHasVertBar) const;

Parameter

bHasHorzBar
Menunjukkan aplikasi memiliki bilah gulir horizontal.

bHasVertBar
Menunjukkan aplikasi memiliki bilah gulir vertikal.

CScrollView::CScrollView

Membuat CScrollView objek.

CScrollView();

Keterangan

Anda harus memanggil atau SetScrollSizes SetScaleToFitSize sebelum tampilan gulir dapat digunakan.

CScrollView::FillOutsideRect

Panggil FillOutsideRect untuk mengisi area tampilan yang muncul di luar area gulir.

void FillOutsideRect(
    CDC* pDC,
    CBrush* pBrush);

Parameter

pDC
Konteks perangkat tempat pengisian akan dilakukan.

pBrush
Sikat dengan area yang akan diisi.

Keterangan

Gunakan FillOutsideRect dalam fungsi handler tampilan OnEraseBkgnd gulir Anda untuk mencegah pengecatan ulang latar belakang yang berlebihan.

Contoh

BOOL CMyScrollView::OnEraseBkgnd(CDC* pDC)
{
   CBrush br(GetSysColor(COLOR_WINDOW));
   FillOutsideRect(pDC, &br);
   return TRUE;                   // Erased
}

CScrollView::GetDeviceScrollPosition

Panggil GetDeviceScrollPosition saat Anda memerlukan posisi horizontal dan vertikal saat ini dari kotak gulir di bilah gulir.

CPoint GetDeviceScrollPosition() const;

Tampilkan Nilai

Posisi horizontal dan vertikal (dalam unit perangkat) dari kotak gulir sebagai CPoint objek.

Keterangan

Pasangan koordinat ini sesuai dengan lokasi dalam dokumen tempat sudut kiri atas tampilan telah digulir. Ini berguna untuk mengimbangi posisi perangkat mouse untuk melihat gulir posisi perangkat.

GetDeviceScrollPosition mengembalikan nilai dalam unit perangkat. Jika Anda menginginkan unit logis, gunakan GetScrollPosition sebagai gantinya.

CScrollView::GetDeviceScrollSizes

GetDeviceScrollSizes mendapatkan mode pemetaan saat ini, ukuran total, dan ukuran garis dan halaman tampilan yang dapat digulir.

void GetDeviceScrollSizes(
    int& nMapMode,
    SIZE& sizeTotal,
    SIZE& sizePage,
    SIZE& sizeLine) const;

Parameter

nMapMode
Mengembalikan mode pemetaan saat ini untuk tampilan ini. Untuk daftar nilai yang mungkin, lihat SetScrollSizes.

sizeTotal
Mengembalikan ukuran total tampilan gulir saat ini di unit perangkat.

sizePage
Mengembalikan jumlah horizontal dan vertikal saat ini untuk menggulir ke setiap arah sebagai respons terhadap klik mouse dalam poros bilah gulir. Anggota cx berisi jumlah horizontal. Anggota cy berisi jumlah vertikal.

sizeLine
Mengembalikan jumlah horizontal dan vertikal saat ini untuk menggulir ke setiap arah sebagai respons terhadap klik mouse dalam panah gulir. Anggota cx berisi jumlah horizontal. Anggota cy berisi jumlah vertikal.

Keterangan

Ukuran ada di unit perangkat. Fungsi anggota ini jarang dipanggil.

CScrollView::GetScrollPosition

Panggil GetScrollPosition saat Anda memerlukan posisi horizontal dan vertikal saat ini dari kotak gulir di bilah gulir.

CPoint GetScrollPosition() const;

Tampilkan Nilai

Posisi horizontal dan vertikal (dalam unit logis) dari kotak gulir sebagai CPoint objek.

Keterangan

Pasangan koordinat ini sesuai dengan lokasi dalam dokumen tempat sudut kiri atas tampilan telah digulir.

GetScrollPosition mengembalikan nilai dalam unit logis. Jika Anda menginginkan unit perangkat, gunakan GetDeviceScrollPosition sebagai gantinya.

CScrollView::GetTotalSize

Panggil GetTotalSize untuk mengambil ukuran horizontal dan vertikal tampilan gulir saat ini.

CSize GetTotalSize() const;

Tampilkan Nilai

Ukuran total tampilan gulir di unit logis. Ukuran horizontal berada di cx anggota nilai yang CSize dikembalikan. Ukuran vertikal ada di cy anggota.

CScrollView::ResizeParentToFit

Panggil ResizeParentToFit untuk membiarkan ukuran tampilan Anda menentukan ukuran jendela bingkainya.

void ResizeParentToFit(BOOL bShrinkOnly = TRUE);

Parameter

bShrinkOnly
Jenis perubahan ukuran yang harus dilakukan. Nilai default, TRUE, menyusutkan jendela bingkai jika sesuai. Bilah gulir masih akan muncul untuk tampilan besar atau jendela bingkai kecil. Nilai FALSE menyebabkan tampilan selalu mengubah ukuran jendela bingkai dengan tepat. Ini bisa agak berbahaya karena jendela bingkai bisa terlalu besar agar pas di dalam jendela bingkai antarmuka beberapa dokumen (MDI) atau layar.

Keterangan

Ini disarankan hanya untuk tampilan di jendela bingkai anak MDI. Gunakan ResizeParentToFit dalam OnInitialUpdate fungsi handler kelas turunan CScrollView Anda. Untuk contoh fungsi anggota ini, lihat CScrollView::SetScrollSizes.

ResizeParentToFit mengasumsikan bahwa ukuran jendela tampilan telah diatur. Jika ukuran jendela tampilan belum diatur saat ResizeParentToFit dipanggil, Anda akan mendapatkan pernyataan. Untuk memastikan bahwa ini tidak terjadi, lakukan panggilan berikut sebelum memanggil ResizeParentToFit:

GetParentFrame()->RecalcLayout();

CScrollView::ScrollToPosition

Panggil ScrollToPosition untuk menggulir ke titik tertentu dalam tampilan.

void ScrollToPosition(POINT pt);

Parameter

pt
Titik untuk menggulir ke, dalam unit logis. Anggota x harus berupa nilai positif (lebih besar dari atau sama dengan 0, hingga ukuran total tampilan). Hal yang sama berlaku untuk y anggota ketika mode pemetaan adalah MM_TEXT. Anggota y negatif dalam mode pemetaan selain MM_TEXT.

Keterangan

Tampilan akan digulir sehingga titik ini berada di sudut kiri atas jendela. Fungsi anggota ini tidak boleh dipanggil jika tampilan diskalakan agar pas.

CScrollView::SetScaleToFitSize

Panggil SetScaleToFitSize saat Anda ingin menskalakan ukuran viewport ke ukuran jendela saat ini secara otomatis.

void SetScaleToFitSize(SIZE sizeTotal);

Parameter

sizeTotal
Ukuran horizontal dan vertikal tempat tampilan akan diskalakan. Ukuran tampilan gulir diukur dalam unit logis. Ukuran horizontal terkandung dalam cx anggota. Ukuran vertikal terkandung dalam cy anggota. Keduanya cx dan cy harus lebih besar dari atau sama dengan 0.

Keterangan

Dengan bilah gulir, hanya sebagian tampilan logis yang dapat terlihat kapan saja. Tetapi dengan kemampuan scale-to-fit, tampilan tidak memiliki bilah gulir dan tampilan logis direntangkan atau menyusut agar sesuai dengan area klien jendela. Saat jendela diubah ukurannya, tampilan menarik datanya pada skala baru berdasarkan ukuran jendela.

Anda biasanya akan melakukan panggilan ke SetScaleToFitSize dalam penimpaan fungsi anggota tampilan OnInitialUpdate Anda. Jika Anda tidak ingin penskalakan otomatis, panggil fungsi anggota sebagai gantinya SetScrollSizes .

SetScaleToFitSize dapat digunakan untuk menerapkan operasi "Zoom to Fit". Gunakan SetScrollSizes untuk menginisialisasi ulang pengguliran.

SetScaleToFitSize mengasumsikan bahwa ukuran jendela tampilan telah diatur. Jika ukuran jendela tampilan belum diatur saat SetScaleToFitSize dipanggil, Anda akan mendapatkan pernyataan. Untuk memastikan bahwa ini tidak terjadi, lakukan panggilan berikut sebelum memanggil SetScaleToFitSize:

GetParentFrame()->RecalcLayout();

CScrollView::SetScrollSizes

Panggil SetScrollSizes saat tampilan akan diperbarui.

void SetScrollSizes(
    int nMapMode,
    SIZE sizeTotal,
    const SIZE& sizePage = sizeDefault,
    const SIZE& sizeLine = sizeDefault);

Parameter

nMapMode
Mode pemetaan yang akan diatur untuk tampilan ini. Nilai yang mungkin termasuk:

Mode Pemetaan Unit Logis Sumbu y positif Meluas...
MM_TEXT 1 piksel Ke bawah
MM_HIMETRIC 0,01 mm Ke atas
MM_TWIPS 1/1440 dalam Ke atas
MM_HIENGLISH 0.001 dalam Ke atas
MM_LOMETRIC 0,1 mm Ke atas
MM_LOENGLISH 0.01 dalam Ke atas

Semua mode ini didefinisikan oleh Windows. Dua mode pemetaan standar, MM_ISOTROPIC dan MM_ANISOTROPIC, tidak digunakan untuk CScrollView. Pustaka kelas menyediakan SetScaleToFitSize fungsi anggota untuk menskalakan tampilan ke ukuran jendela. Kolom tiga dalam tabel di atas menjelaskan orientasi koordinat.

sizeTotal
Ukuran total tampilan gulir. Anggota cx berisi tingkat horizontal. Anggota cy berisi tingkat vertikal. Ukuran berada dalam unit logis. Keduanya cx dan cy harus lebih besar dari atau sama dengan 0.

sizePage
Jumlah horizontal dan vertikal untuk menggulir ke setiap arah sebagai respons terhadap klik mouse di poros bilah gulir. Anggota cx berisi jumlah horizontal. Anggota cy berisi jumlah vertikal.

sizeLine
Jumlah horizontal dan vertikal untuk menggulir ke setiap arah sebagai respons terhadap klik mouse dalam panah gulir. Anggota cx berisi jumlah horizontal. Anggota cy berisi jumlah vertikal.

Keterangan

Sebut saja dalam penimpaan OnUpdate fungsi anggota Anda untuk menyesuaikan karakteristik pengguliran ketika, misalnya, dokumen awalnya ditampilkan atau ketika berubah ukuran.

Anda biasanya akan mendapatkan informasi ukuran dari dokumen terkait tampilan dengan memanggil fungsi anggota dokumen, mungkin disebut GetMyDocSize, yang Anda berikan dengan kelas dokumen turunan Anda. Kode berikut menunjukkan pendekatan ini:

CMyScrollDoc* pMyDoc = (CMyScrollDoc*)GetDocument();
SetScrollSizes(nMapMode, pMyDoc->GetMyDocSize());

Atau, Anda terkadang perlu mengatur ukuran tetap, seperti dalam kode berikut:

SetScrollSizes(nMapMode, CSize(100, 100));

Anda harus mengatur mode pemetaan ke salah satu mode pemetaan Windows kecuali MM_ISOTROPIC atau MM_ANISOTROPIC. Jika Anda ingin menggunakan mode pemetaan yang tidak dibatasi, panggil SetScaleToFitSize fungsi anggota alih-alih SetScrollSizes.

Contoh

void CMyScrollView::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/,
   CObject* /*pHint*/)
{
   // Implement a GetMyDocSize() member function in 
   // your document class; it returns a CSize.
   CMyScrollDoc* pMyDoc = (CMyScrollDoc*)GetDocument();
   SetScrollSizes(MM_LOENGLISH, pMyDoc->GetMyDocSize());
   ResizeParentToFit();   // Default bShrinkOnly argument
}

 

void CMyScrollView::OnInitialUpdate()
{
   CScrollView::OnInitialUpdate();

   // The GetMyDocSize() member function is implemented in 
   // your document class. The return type is CSize.
   CMyScrollDoc* pMyDoc = (CMyScrollDoc*)GetDocument();
   SetScrollSizes(MM_TEXT, pMyDoc->GetMyDocSize());
}

Lihat juga

Sampel MFC DIBLOOK
CView Kelas
Bagan Hierarki
CSplitterWnd Kelas