Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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_HSCROLLdanWS_VSCROLLGaya Windows.Kontrol bilah gulir juga dapat ditambahkan ke bingkai yang berisi tampilan, dalam hal ini kerangka kerja meneruskan
WM_HSCROLLdanWM_VSCROLLpesan dari jendela bingkai ke tampilan yang saat ini aktif.Kerangka kerja juga meneruskan pesan gulir dari
CSplitterWndkontrol pemisah ke panel pemisah yang saat ini aktif (tampilan). Saat ditempatkan diCSplitterWnddengan bilah gulir bersama,CScrollViewobjek 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