Kelas CRgn
Merangkum wilayah antarmuka perangkat grafis (GDI) Windows.
Sintaks
class CRgn : public CGdiObject
Anggota
Konstruktor Publik
Nama | Deskripsi |
---|---|
CRgn::CRgn | Membuat CRgn objek. |
Metode Publik
Nama | Deskripsi |
---|---|
CRgn::CombineRgn | CRgn Mengatur objek sehingga setara dengan penyatuan dua objek yang ditentukanCRgn . |
CRgn::CopyRgn | CRgn Mengatur objek sehingga merupakan salinan objek tertentuCRgn . |
CRgn::CreateEllipticRgn | Menginisialisasi CRgn objek dengan wilayah elips. |
CRgn::CreateEllipticRgnIndirect | Menginisialisasi CRgn objek dengan wilayah elips yang ditentukan oleh struktur RECT . |
CRgn::CreateFromData | Membuat wilayah dari wilayah tertentu dan data transformasi. |
CRgn::CreateFromPath | Membuat wilayah dari jalur yang dipilih ke dalam konteks perangkat tertentu. |
CRgn::CreatePolygonRgn | Menginisialisasi CRgn objek dengan wilayah poligonal. Sistem menutup poligon secara otomatis, jika perlu, dengan menggambar garis dari puncak terakhir ke yang pertama. |
CRgn::CreatePolyPolygonRgn | Menginisialisasi CRgn objek dengan wilayah yang terdiri dari serangkaian poligon tertutup. Poligon mungkin terputus-putus, atau mungkin tumpang tindih. |
CRgn::CreateRectRgn | Menginisialisasi CRgn objek dengan wilayah persegi panjang. |
CRgn::CreateRectRgnIndirect | Menginisialisasi CRgn objek dengan wilayah persegi panjang yang ditentukan oleh struktur RECT. |
CRgn::CreateRoundRectRgn | Menginisialisasi CRgn objek dengan wilayah persegi panjang dengan sudut bulat. |
CRgn::EqualRgn | Memeriksa dua CRgn objek untuk menentukan apakah objek tersebut setara. |
CRgn::FromHandle | Mengembalikan penunjuk ke CRgn objek saat diberikan handel ke wilayah Windows. |
CRgn::GetRegionData | Mengisi buffer yang ditentukan dengan data yang menjelaskan wilayah tertentu. |
CRgn::GetRgnBox | Mengambil koordinat persegi panjang CRgn pembatas objek. |
CRgn::OffsetRgn | CRgn Memindahkan objek menurut offset yang ditentukan. |
CRgn::P tInRegion | Menentukan apakah titik yang ditentukan berada di wilayah tersebut. |
CRgn::RectInRegion | Menentukan apakah ada bagian dari persegi panjang tertentu yang berada dalam batas wilayah. |
CRgn::SetRectRgn | CRgn Mengatur objek ke wilayah persegi panjang yang ditentukan. |
Operator Publik
Nama | Deskripsi |
---|---|
CRgn::operator HRGN | Mengembalikan handel Windows yang terkandung dalam CRgn objek. |
Keterangan
Wilayah adalah area elips atau poligonal dalam jendela. Untuk menggunakan wilayah, Anda menggunakan fungsi anggota kelas CRgn
dengan fungsi kliping yang didefinisikan sebagai anggota kelas CDC
.
Fungsi anggota membuat CRgn
, mengubah, dan mengambil informasi tentang objek wilayah tempat mereka dipanggil.
Untuk informasi selengkapnya tentang menggunakan CRgn
, lihat Objek Grafis.
Hierarki Warisan
CRgn
Persyaratan
Header: afxwin.h
CRgn::CombineRgn
Membuat wilayah GDI baru dengan menggabungkan dua wilayah yang ada.
int CombineRgn(
CRgn* pRgn1,
CRgn* pRgn2,
int nCombineMode);
Parameter
pRgn1
Mengidentifikasi wilayah yang sudah ada.
pRgn2
Mengidentifikasi wilayah yang sudah ada.
nCombineMode
Menentukan operasi yang akan dilakukan saat menggabungkan dua wilayah sumber. Ini bisa menjadi salah satu nilai berikut:
RGN_AND Menggunakan area yang tumpang tindih dari kedua wilayah (persimpangan).
RGN_COPY Membuat salinan wilayah 1 (diidentifikasi oleh pRgn1).
RGN_DIFF Membuat wilayah yang terdiri dari wilayah 1 (diidentifikasi oleh pRgn1) yang bukan bagian dari wilayah 2 (diidentifikasi oleh pRgn2).
RGN_OR Menggabungkan kedua wilayah secara keseluruhan (gabungan).
RGN_XOR Menggabungkan kedua wilayah tetapi menghapus area yang tumpang tindih.
Tampilkan Nilai
Menentukan jenis wilayah yang dihasilkan. Jenis dapat berupa salah satu dari nilai berikut:
WILAYAH COMPLEXREGION Baru memiliki batas yang tumpang tindih.
KESALAHAN Tidak ada wilayah baru yang dibuat.
WILAYAH BARU NULLREGION kosong.
WILAYAH SIMPLEREGION Baru tidak memiliki batas yang tumpang tindih.
Keterangan
Wilayah digabungkan seperti yang ditentukan oleh nCombineMode.
Dua wilayah yang ditentukan digabungkan, dan handel wilayah yang dihasilkan disimpan dalam CRgn
objek. Dengan demikian, wilayah apa pun yang disimpan dalam CRgn
objek digantikan oleh wilayah gabungan.
Ukuran suatu wilayah dibatasi hingga 32.767 sebesar 32.767 unit logis atau memori 64K, mana yang lebih kecil.
Gunakan CopyRgn untuk hanya menyalin satu wilayah ke wilayah lain.
Contoh
CRgn rgnA, rgnB, rgnC;
VERIFY(rgnA.CreateRectRgn(50, 50, 150, 150));
VERIFY(rgnB.CreateRectRgn(100, 100, 200, 200));
VERIFY(rgnC.CreateRectRgn(0, 0, 50, 50));
int nCombineResult = rgnC.CombineRgn(&rgnA, &rgnB, RGN_OR);
ASSERT(nCombineResult != ERROR && nCombineResult != NULLREGION);
CBrush br1, br2, br3;
VERIFY(br1.CreateSolidBrush(RGB(255, 0, 0))); // rgnA Red
VERIFY(pDC->FrameRgn(&rgnA, &br1, 2, 2));
VERIFY(br2.CreateSolidBrush(RGB(0, 255, 0))); // rgnB Green
VERIFY(pDC->FrameRgn(&rgnB, &br2, 2, 2));
VERIFY(br3.CreateSolidBrush(RGB(0, 0, 255))); // rgnC Blue
VERIFY(pDC->FrameRgn(&rgnC, &br3, 2, 2));
CRgn::CopyRgn
Menyalin wilayah yang ditentukan oleh pRgnSrc ke CRgn
dalam objek.
int CopyRgn(CRgn* pRgnSrc);
Parameter
pRgnSrc
Mengidentifikasi wilayah yang sudah ada.
Tampilkan Nilai
Menentukan jenis wilayah yang dihasilkan. Jenis dapat berupa salah satu dari nilai berikut:
WILAYAH COMPLEXREGION Baru memiliki batas yang tumpang tindih.
KESALAHAN Tidak ada wilayah baru yang dibuat.
WILAYAH BARU NULLREGION kosong.
WILAYAH SIMPLEREGION Baru tidak memiliki batas yang tumpang tindih.
Keterangan
Wilayah baru menggantikan wilayah yang sebelumnya disimpan dalam CRgn
objek. Fungsi ini adalah kasus khusus dari fungsi anggota CombineRgn .
Contoh
Lihat contoh untuk CRgn::CreateEllipticRgn.
CRgn::CreateEllipticRgn
Membuat wilayah elips.
BOOL CreateEllipticRgn(
int x1,
int y1,
int x2,
int y2);
Parameter
x1
Menentukan koordinat x logis dari sudut kiri atas persegi panjang pembatas elips.
y1
Menentukan koordinat y logis dari sudut kiri atas persegi panjang pembatas elips.
x2
Menentukan koordinat x logis dari sudut kanan bawah persegi panjang pembatas elips.
y2
Menentukan koordinat y logis dari sudut kanan bawah persegi panjang pembatas elips.
Tampilkan Nilai
Bukan nol jika operasi berhasil; jika tidak, 0.
Keterangan
Wilayah didefinisikan oleh persegi panjang pembatas yang ditentukan oleh x1, y1, x2, dan y2. Wilayah disimpan dalam CRgn
objek .
Ukuran suatu wilayah dibatasi hingga 32.767 sebesar 32.767 unit logis atau memori 64K, mana yang lebih kecil.
Setelah selesai menggunakan wilayah yang dibuat dengan CreateEllipticRgn
fungsi , aplikasi harus memilih wilayah di luar konteks perangkat dan menggunakan DeleteObject
fungsi untuk menghapusnya.
Contoh
CRgn rgnA, rgnB, rgnC;
VERIFY(rgnA.CreateEllipticRgn(200, 100, 350, 250));
VERIFY(rgnB.CreateRectRgn(0, 0, 50, 50));
VERIFY(rgnB.CopyRgn(&rgnA));
int nOffsetResult = rgnB.OffsetRgn(-75, 75);
ASSERT(nOffsetResult != ERROR && nOffsetResult != NULLREGION);
VERIFY(rgnC.CreateRectRgn(0, 0, 1, 1));
int nCombineResult = rgnC.CombineRgn(&rgnA, &rgnB, RGN_AND);
ASSERT(nCombineResult != ERROR && nOffsetResult != NULLREGION);
CBrush brA, brB, brC;
VERIFY(brC.CreateHatchBrush(HS_FDIAGONAL, RGB(0, 0, 255))); // Blue
VERIFY(pDC->FillRgn(&rgnC, &brC));
VERIFY(brA.CreateSolidBrush(RGB(255, 0, 0))); // rgnA Red
VERIFY(pDC->FrameRgn(&rgnA, &brA, 2, 2));
VERIFY(brB.CreateSolidBrush(RGB(0, 255, 0))); // rgnB Green
VERIFY(pDC->FrameRgn(&rgnB, &brB, 2, 2));
CRgn::CreateEllipticRgnIndirect
Membuat wilayah elips.
BOOL CreateEllipticRgnIndirect(LPCRECT lpRect);
Parameter
lpRect
Menunjuk ke RECT
struktur atau CRect
objek yang berisi koordinat logis sudut kiri atas dan kanan bawah persegi panjang pembatas elips.
Tampilkan Nilai
Bukan nol jika operasi berhasil; jika tidak, 0.
Keterangan
Wilayah didefinisikan oleh struktur atau objek yang diacu oleh lpRect dan disimpan dalam CRgn
objek.
Ukuran suatu wilayah dibatasi hingga 32.767 sebesar 32.767 unit logis atau memori 64K, mana yang lebih kecil.
Setelah selesai menggunakan wilayah yang dibuat dengan CreateEllipticRgnIndirect
fungsi , aplikasi harus memilih wilayah di luar konteks perangkat dan menggunakan DeleteObject
fungsi untuk menghapusnya.
Contoh
Lihat contoh untuk CRgn::CreateRectRgnIndirect.
CRgn::CreateFromData
Membuat wilayah dari wilayah tertentu dan data transformasi.
BOOL CreateFromData(
const XFORM* lpXForm,
int nCount,
const RGNDATA* pRgnData);
Parameter
lpXForm
Menunjuk ke struktur ata XFORMyang menentukan transformasi yang akan dilakukan pada wilayah tersebut. Jika pointer ini ADALAH NULL, transformasi identitas digunakan.
nCount
Menentukan jumlah byte yang ditujukkan oleh pRgnData.
pRgnData
Menunjuk ke struktur data RGNDATA yang berisi data wilayah.
Tampilkan Nilai
Bukan nol jika fungsi berhasil; jika tidak, 0.
Keterangan
Aplikasi dapat mengambil data untuk suatu wilayah dengan memanggil CRgn::GetRegionData
fungsi .
CRgn::CreateFromPath
Membuat wilayah dari jalur yang dipilih ke dalam konteks perangkat tertentu.
BOOL CreateFromPath(CDC* pDC);
Parameter
pDC
Mengidentifikasi konteks perangkat yang berisi jalur tertutup.
Tampilkan Nilai
Bukan nol jika fungsi berhasil; jika tidak, 0.
Keterangan
Konteks perangkat yang diidentifikasi oleh parameter pDC harus berisi jalur tertutup. Setelah CreateFromPath
mengonversi jalur menjadi wilayah, Windows membuang jalur tertutup dari konteks perangkat.
CRgn::CreatePolygonRgn
Membuat wilayah poligonal.
BOOL CreatePolygonRgn(
LPPOINT lpPoints,
int nCount,
int nMode);
Parameter
lpPoints
Menunjuk ke array POINT
struktur atau array CPoint
objek. Setiap struktur menentukan koordinat x dan koordinat y dari satu puncak poligon. Struktur POINT
memiliki bentuk berikut:
typedef struct tagPOINT {
int x;
int y;
} POINT;
nCount
Menentukan jumlah POINT
struktur atau CPoint
objek dalam array yang ditujukkan oleh lpPoints.
nMode
Menentukan mode pengisian untuk wilayah tersebut. Parameter ini mungkin BERGANTIAN atau BERLIKU.
Tampilkan Nilai
Bukan nol jika operasi berhasil; jika tidak, 0.
Keterangan
Sistem menutup poligon secara otomatis, jika perlu, dengan menggambar garis dari puncak terakhir ke yang pertama. Wilayah yang dihasilkan disimpan dalam CRgn
objek .
Ukuran suatu wilayah dibatasi hingga 32.767 sebesar 32.767 unit logis atau memori 64K, mana yang lebih kecil.
Ketika mode pengisian poligon bergantian, sistem mengisi area antara sisi poligon bernomor ganjil dan bernomor genap pada setiap baris pemindaian. Artinya, sistem mengisi area antara sisi pertama dan kedua, antara sisi ketiga dan keempat, dan sebagainya.
Ketika mode pengisian poligon adalah WINDING, sistem menggunakan arah di mana gambar digambar untuk menentukan apakah akan mengisi area. Setiap segmen garis dalam poligon digambar secara searah jarang atau arah berlawanan arah jarang. Setiap kali garis imajiner digambar dari area tertutup ke bagian luar gambar melewati segmen garis searah jaring jam, hitungan akan bertambah bertahap. Ketika garis melewati segmen garis berlawanan arah jaring, jumlahnya dikurangi. Area diisi jika jumlahnya bukan nol ketika garis mencapai bagian luar gambar.
Setelah aplikasi selesai menggunakan wilayah yang dibuat dengan CreatePolygonRgn
fungsi , aplikasi harus memilih wilayah di luar konteks perangkat dan menggunakan DeleteObject
fungsi untuk menghapusnya.
Contoh
CRgn rgnA, rgnB;
CPoint ptVertex[5];
ptVertex[0].x = 180;
ptVertex[0].y = 80;
ptVertex[1].x = 100;
ptVertex[1].y = 160;
ptVertex[2].x = 120;
ptVertex[2].y = 260;
ptVertex[3].x = 240;
ptVertex[3].y = 260;
ptVertex[4].x = 260;
ptVertex[4].y = 160;
VERIFY(rgnA.CreatePolygonRgn(ptVertex, 5, ALTERNATE));
CRect rectRgnBox;
int nRgnBoxResult = rgnA.GetRgnBox(&rectRgnBox);
ASSERT(nRgnBoxResult != ERROR && nRgnBoxResult != NULLREGION);
CBrush brA, brB;
VERIFY(brA.CreateSolidBrush(RGB(255, 0, 0))); // rgnA Red
VERIFY(pDC->FrameRgn(&rgnA, &brA, 2, 2));
VERIFY(brB.CreateSolidBrush(RGB(0, 0, 255))); // Blue
rectRgnBox.InflateRect(3, 3);
pDC->FrameRect(&rectRgnBox, &brB);
CRgn::CreatePolyPolygonRgn
Membuat wilayah yang terdiri dari serangkaian poligon tertutup.
BOOL CreatePolyPolygonRgn(
LPPOINT lpPoints,
LPINT lpPolyCounts,
int nCount,
int nPolyFillMode);
Parameter
lpPoints
Menunjuk ke array POINT
struktur atau array CPoint
objek yang menentukan simpul poligon. Setiap poligon harus ditutup secara eksplisit karena sistem tidak menutupnya secara otomatis. Poligon ditentukan secara berturut-turut. Struktur POINT
memiliki bentuk berikut:
typedef struct tagPOINT {
int x;
int y;
} POINT;
lpPolyCounts
Menunjuk ke array bilangan bulat. Bilangan bulat pertama menentukan jumlah simpul dalam poligon pertama dalam array lpPoints , bilangan bulat kedua menentukan jumlah simpul di poligon kedua, dan sebagainya.
nCount
Menentukan jumlah total bilangan bulat dalam array lpPolyCounts .
nPolyFillMode
Menentukan mode pengisian poligon. Nilai ini mungkin BERGANTIAN atau BERLIKU.
Tampilkan Nilai
Bukan nol jika operasi berhasil; jika tidak, 0.
Keterangan
Wilayah yang dihasilkan disimpan dalam CRgn
objek .
Poligon mungkin terputus-putus, atau mungkin tumpang tindih.
Ukuran suatu wilayah dibatasi hingga 32.767 sebesar 32.767 unit logis atau memori 64K, mana yang lebih kecil.
Ketika mode pengisian poligon bergantian, sistem mengisi area antara sisi poligon bernomor ganjil dan bernomor genap pada setiap baris pemindaian. Artinya, sistem mengisi area antara sisi pertama dan kedua, antara sisi ketiga dan keempat, dan sebagainya.
Ketika mode pengisian poligon adalah WINDING, sistem menggunakan arah di mana gambar digambar untuk menentukan apakah akan mengisi area. Setiap segmen garis dalam poligon digambar secara searah jarang atau arah berlawanan arah jarang. Setiap kali garis imajiner digambar dari area tertutup ke bagian luar gambar melewati segmen garis searah jaring jam, hitungan akan bertambah bertahap. Ketika garis melewati segmen garis berlawanan arah jaring, jumlahnya dikurangi. Area diisi jika jumlahnya bukan nol ketika garis mencapai bagian luar gambar.
Setelah aplikasi selesai menggunakan wilayah yang dibuat dengan CreatePolyPolygonRgn
fungsi , aplikasi harus memilih wilayah di luar konteks perangkat dan menggunakan fungsi anggota CGDIObject::D eleteObject untuk menghapusnya.
CRgn::CreateRectRgn
Membuat wilayah persegi panjang yang disimpan dalam CRgn
objek.
BOOL CreateRectRgn(
int x1,
int y1,
int x2,
int y2);
Parameter
x1
Menentukan koordinat x logis dari sudut kiri atas wilayah.
y1
Menentukan koordinat y logis dari sudut kiri atas wilayah.
x2
Menentukan koordinat x logis dari sudut kanan bawah wilayah.
y2
Menentukan koordinat y logis dari sudut kanan bawah wilayah.
Tampilkan Nilai
Bukan nol jika operasi berhasil; jika tidak, 0.
Keterangan
Ukuran suatu wilayah dibatasi hingga 32.767 sebesar 32.767 unit logis atau memori 64K, mana yang lebih kecil.
Setelah selesai menggunakan wilayah yang dibuat oleh CreateRectRgn
, aplikasi harus menggunakan fungsi anggota CGDIObject::D eleteObject untuk menghapus wilayah.
Contoh
CRgn rgn;
BOOL bSucceeded = rgn.CreateRectRgn(50, 20, 150, 120);
ASSERT(bSucceeded == TRUE);
Untuk contoh tambahan, lihat CRgn::CombineRgn.
CRgn::CreateRectRgnIndirect
Membuat wilayah persegi panjang yang disimpan dalam CRgn
objek.
BOOL CreateRectRgnIndirect(LPCRECT lpRect);
Parameter
lpRect
Menunjuk ke RECT
struktur atau CRect
objek yang berisi koordinat logis sudut kiri atas dan kanan bawah wilayah. Struktur RECT
memiliki bentuk berikut:
typedef struct tagRECT {
int left;
int top;
int right;
int bottom;
} RECT;
Tampilkan Nilai
Bukan nol jika operasi berhasil; jika tidak, 0.
Keterangan
Ukuran suatu wilayah dibatasi hingga 32.767 sebesar 32.767 unit logis atau memori 64K, mana yang lebih kecil.
Setelah selesai menggunakan wilayah yang dibuat oleh CreateRectRgnIndirect
, aplikasi harus menggunakan fungsi anggota CGDIObject::D eleteObject untuk menghapus wilayah.
Contoh
CRgn rgnA, rgnB, rgnC;
CRect rectA(50, 50, 150, 150);
CRect rectB(100, 50, 200, 150);
VERIFY(rgnA.CreateRectRgnIndirect(&rectA));
VERIFY(rgnB.CreateEllipticRgnIndirect(&rectB));
VERIFY(rgnC.CreateRectRgn( 0, 0, 50, 50 ));
int nCombineResult = rgnC.CombineRgn( &rgnA, &rgnB, RGN_AND );
ASSERT( nCombineResult != ERROR && nCombineResult != NULLREGION );
CBrush brA, brB, brC;
VERIFY(brA.CreateSolidBrush( RGB(255, 0, 0) ));
VERIFY(pDC->FrameRgn( &rgnA, &brA, 2, 2 )); // rgnA Red
VERIFY(brB.CreateSolidBrush( RGB(0, 255, 0) ));
VERIFY(pDC->FrameRgn( &rgnB, &brB, 2, 2 )); // rgnB Green
VERIFY(brC.CreateSolidBrush( RGB(0, 0, 255) )); // rgnC Blue
VERIFY(pDC->FrameRgn( &rgnC, &brC, 2, 2 ));
CRgn::CreateRoundRectRgn
Membuat wilayah persegi panjang dengan sudut bulat yang disimpan dalam CRgn
objek.
BOOL CreateRoundRectRgn(
int x1,
int y1,
int x2,
int y2,
int x3,
int y3);
Parameter
x1
Menentukan koordinat x logis dari sudut kiri atas wilayah.
y1
Menentukan koordinat y logis dari sudut kiri atas wilayah.
x2
Menentukan koordinat x logis dari sudut kanan bawah wilayah.
y2
Menentukan koordinat y logis dari sudut kanan bawah wilayah.
x3
Menentukan lebar elips yang digunakan untuk membuat sudut bulat.
y3
Menentukan tinggi elips yang digunakan untuk membuat sudut bulat.
Tampilkan Nilai
Bukan nol jika operasi berhasil; jika tidak, 0.
Keterangan
Ukuran suatu wilayah dibatasi hingga 32.767 sebesar 32.767 unit logis atau memori 64K, mana yang lebih kecil.
Setelah aplikasi selesai menggunakan wilayah yang dibuat dengan CreateRoundRectRgn
fungsi , aplikasi harus memilih wilayah di luar konteks perangkat dan menggunakan fungsi anggota CGDIObject::D eleteObject untuk menghapusnya.
Contoh
CRgn rgnA, rgnB, rgnC;
VERIFY(rgnA.CreateRoundRectRgn( 50, 50, 150, 150, 30, 30 ));
VERIFY(rgnB.CreateRoundRectRgn( 200, 75, 250, 125, 50, 50 ));
VERIFY(rgnC.CreateRectRgn( 0, 0, 50, 50 ));
int nCombineResult = rgnC.CombineRgn( &rgnA, &rgnB, RGN_OR );
ASSERT( nCombineResult != ERROR && nCombineResult != NULLREGION );
CBrush brA, brB, brC;
VERIFY(brA.CreateSolidBrush( RGB(255, 0, 0) ));
VERIFY(pDC->FillRgn( &rgnA, &brA)); // rgnA Red Filled
VERIFY(brB.CreateSolidBrush( RGB(0, 255, 0) ));
VERIFY(pDC->FillRgn( &rgnB, &brB)); // rgnB Green Filled
VERIFY(brC.CreateSolidBrush( RGB(0, 0, 255) )); // rgnC Blue
VERIFY(pDC->FrameRgn( &rgnC, &brC, 2, 2 ));
CRgn::CRgn
Membuat CRgn
objek.
CRgn();
Keterangan
Anggota m_hObject
data tidak berisi wilayah GDI Windows yang valid sampai objek diinisialisasi dengan satu atau beberapa fungsi anggota lainnya CRgn
.
Contoh
Lihat contoh untuk CRgn::CreateRoundRectRgn.
CRgn::EqualRgn
Menentukan apakah wilayah yang diberikan setara dengan wilayah yang disimpan dalam CRgn
objek.
BOOL EqualRgn(CRgn* pRgn) const;
Parameter
pRgn
Mengidentifikasi wilayah.
Tampilkan Nilai
Bukan nol jika kedua wilayah tersebut setara; jika tidak, 0.
Contoh
CRgn rgnA, rgnB;
VERIFY(rgnA.CreateEllipticRgn(200, 100, 350, 250));
VERIFY(rgnB.CreateRectRgn(0, 0, 50, 50));
VERIFY(rgnB.CopyRgn(&rgnA));
int nOffsetResult = rgnB.OffsetRgn(-75, 75);
ASSERT(nOffsetResult != ERROR && nOffsetResult != NULLREGION);
ASSERT(FALSE == rgnB.EqualRgn(&rgnA));
CRgn::FromHandle
Mengembalikan penunjuk ke CRgn
objek saat diberikan handel ke wilayah Windows.
static CRgn* PASCAL FromHandle(HRGN hRgn);
Parameter
hRgn
Menentukan handel ke wilayah Windows.
Tampilkan Nilai
Penunjuk ke CRgn
objek. Jika fungsi tidak berhasil, nilai yang dikembalikan adalah NULL.
Keterangan
CRgn
Jika objek belum dilampirkan ke handel, objek sementara CRgn
dibuat dan dilampirkan. Objek sementara CRgn
ini hanya berlaku sampai kali berikutnya aplikasi memiliki waktu menganggur dalam perulangan peristiwanya, di mana semua objek grafis sementara dihapus. Cara lain untuk mengatakan ini adalah bahwa objek sementara hanya valid selama pemrosesan satu pesan jendela.
CRgn::GetRegionData
Mengisi buffer yang ditentukan dengan data yang menjelaskan wilayah.
int GetRegionData(
LPRGNDATA lpRgnData,
int nCount) const;
Parameter
lpRgnData
Menunjuk ke struktur data RGNDATA yang menerima informasi. Jika parameter ini NULL, nilai pengembalian berisi jumlah byte yang diperlukan untuk data wilayah.
nCount
Menentukan ukuran, dalam byte, dari buffer lpRgnData .
Tampilkan Nilai
Jika fungsi berhasil dan nCount menentukan jumlah byte yang memadai, nilai pengembalian selalu nCount. Jika fungsi gagal, atau jika nCount menentukan jumlah byte yang kurang dari yang memadai, nilai yang dikembalikan adalah 0 (kesalahan).
Keterangan
Data ini mencakup dimensi persegi panjang yang membentuk wilayah. Fungsi ini digunakan bersama dengan CRgn::CreateFromData
fungsi .
CRgn::GetRgnBox
Mengambil koordinat persegi panjang CRgn
pembatas objek.
int GetRgnBox(LPRECT lpRect) const;
Parameter
lpRect
Arahkan ke RECT
struktur atau CRect
objek untuk menerima koordinat persegi panjang pembatas. Struktur RECT
memiliki bentuk berikut:
typedef struct tagRECT {
int left;
int top;
int right;
int bottom;
} RECT;
Tampilkan Nilai
Menentukan jenis wilayah. Ini bisa menjadi salah satu nilai berikut:
Wilayah COMPLEXREGION memiliki batas yang tumpang tindih.
Wilayah NULLREGION kosong.
Objek KESALAHAN
CRgn
tidak menentukan wilayah yang valid.Wilayah SIMPLEREGION tidak memiliki batas yang tumpang tindih.
Contoh
Lihat contoh untuk CRgn::CreatePolygonRgn.
CRgn::OffsetRgn
Memindahkan wilayah yang disimpan dalam CRgn
objek oleh offset yang ditentukan.
int OffsetRgn(
int x,
int y);
int OffsetRgn(POINT point);
Parameter
x
Menentukan jumlah unit untuk berpindah ke kiri atau kanan.
y
Menentukan jumlah unit yang akan dipindahkan ke atas atau ke bawah.
ujung
Koordinat x titik menentukan jumlah unit untuk berpindah ke kiri atau kanan. Koordinat y titik menentukan jumlah unit yang akan dipindahkan ke atas atau ke bawah. Parameter titik mungkin berupa POINT
struktur atau CPoint
objek.
Tampilkan Nilai
Jenis wilayah baru. Ini bisa menjadi salah satu nilai berikut:
Wilayah COMPLEXREGION memiliki batas yang tumpang tindih.
Handel Wilayah KESALAHAN tidak valid.
Wilayah NULLREGION kosong.
Wilayah SIMPLEREGION tidak memiliki batas yang tumpang tindih.
Keterangan
Fungsi ini memindahkan unit wilayah x di sepanjang sumbu x dan unit y di sepanjang sumbu y.
Nilai koordinat suatu wilayah harus kurang dari atau sama dengan 32.767 dan lebih besar dari atau sama dengan -32.768. Parameter x dan y harus dipilih dengan hati-hati untuk mencegah koordinat wilayah yang tidak valid.
Contoh
Lihat contoh untuk CRgn::CreateEllipticRgn.
CRgn::operator HRGN
Gunakan operator ini untuk mendapatkan handel Windows GDI objek yang CRgn
terpasang.
operator HRGN() const;
Tampilkan Nilai
Jika berhasil, handel ke objek GDI Windows yang diwakili oleh CRgn
objek; jika tidak, NULL.
Keterangan
Operator ini adalah operator casting, yang mendukung penggunaan langsung objek HRGN.
Untuk informasi selengkapnya tentang menggunakan objek grafis, lihat artikel Objek Grafis di Windows SDK.
CRgn::P tInRegion
Memeriksa apakah titik yang diberikan oleh x dan y berada di wilayah yang disimpan dalam CRgn
objek.
BOOL PtInRegion(
int x,
int y) const;
BOOL PtInRegion(POINT point) const;
Parameter
x
Menentukan koordinat x logis dari titik yang akan diuji.
y
Menentukan koordinat y logis dari titik yang akan diuji.
ujung
Koordinat titik x dan y menentukan koordinat x dan y dari titik untuk menguji nilai. Parameter titik dapat berupa POINT
struktur atau CPoint
objek.
Tampilkan Nilai
Bukan nol jika titik berada di wilayah tersebut; jika tidak, 0.
CRgn::RectInRegion
Menentukan apakah ada bagian dari persegi panjang yang ditentukan oleh lpRect berada dalam batas wilayah yang disimpan dalam CRgn
objek.
BOOL RectInRegion(LPCRECT lpRect) const;
Parameter
lpRect
Menunjuk ke RECT
struktur atau CRect
objek. Struktur RECT
memiliki bentuk berikut:
typedef struct tagRECT {
int left;
int top;
int right;
int bottom;
} RECT;
Tampilkan Nilai
Bukan nol jika ada bagian dari persegi panjang yang ditentukan terletak di dalam batas wilayah; jika tidak, 0.
CRgn::SetRectRgn
Membuat wilayah persegi panjang.
void SetRectRgn(
int x1,
int y1,
int x2,
int y2);
void SetRectRgn(LPCRECT lpRect);
Parameter
x1
Menentukan koordinat x dari sudut kiri atas wilayah persegi panjang.
y1
Menentukan koordinat y dari sudut kiri atas wilayah persegi panjang.
x2
Menentukan koordinat x dari sudut kanan bawah wilayah persegi panjang.
y2
Menentukan koordinat y dari sudut kanan bawah wilayah persegi panjang.
lpRect
Menentukan wilayah persegi panjang. Dapat berupa penunjuk ke RECT
struktur atau CRect
objek.
Keterangan
Namun, tidak seperti CreateRectRgn, itu tidak mengalokasikan memori tambahan dari timbunan aplikasi Windows lokal. Sebaliknya, ia menggunakan ruang yang dialokasikan untuk wilayah yang disimpan dalam CRgn
objek. Ini berarti bahwa CRgn
objek harus sudah diinisialisasi dengan wilayah Windows yang valid sebelum memanggil SetRectRgn
. Poin yang diberikan oleh x1, y1, x2, dan y2 menentukan ukuran minimum ruang yang dialokasikan.
Gunakan fungsi ini alih-alih CreateRectRgn
fungsi anggota untuk menghindari panggilan ke manajer memori lokal.