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
danWS_VSCROLL
Gaya Windows.Kontrol bilah gulir juga dapat ditambahkan ke bingkai yang berisi tampilan, dalam hal ini kerangka kerja meneruskan
WM_HSCROLL
danWM_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 diCSplitterWnd
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
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