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.
Windows GDI+ mengekspos API datar yang terdiri dari sekitar 600 fungsi, yang diimplementasikan dalam Gdiplus.dll dan dideklarasikan dalam Gdiplusflat.h. Fungsi dalam API datar GDI+ dibungkus oleh koleksi sekitar 40 kelas C++. Disarankan agar Anda tidak langsung memanggil fungsi di API datar. Setiap kali Anda melakukan panggilan ke GDI+, Anda harus melakukannya dengan memanggil metode dan fungsi yang disediakan oleh pembungkus C++. Layanan Dukungan Produk Microsoft tidak akan memberikan dukungan untuk kode yang memanggil API datar secara langsung.
Sebagai alternatif untuk pembungkus C++, Microsoft .NET Framework menyediakan serangkaian kelas pembungkus kode terkelola untuk GDI+. Pembungkus kode terkelola untuk GDI+ milik namespace berikut.
- System.Drawing
- System.Drawing.Drawing2D
- System.Drawing.Imaging
- System.Drawing.Text
Kedua set pembungkus (C++ dan kode terkelola) menggunakan pendekatan berorientasi objek, sehingga ada beberapa perbedaan antara cara parameter diteruskan ke metode pembungkus dan cara parameter diteruskan ke fungsi di API datar. Misalnya, salah satu pembungkus C++ adalah kelasMatrix. Setiap objek Matrix memiliki bidang, nativeMatrix, yang menunjuk ke variabel internal jenis GpMatrix. Saat Anda meneruskan parameter ke metode objek Matrix, metode tersebut meneruskan parameter tersebut (atau sekumpulan parameter terkait) bersama dengan salah satu fungsi dalam API datar GDI+. Tetapi metode itu juga meneruskan bidang nativeMatrix (sebagai parameter input) ke fungsi API datar. Kode berikut menunjukkan bagaimana metode Matrix::Shear memanggil GdipShearMatrix(GpMatrix *matrix, REAL shearX, REAL shearY, GpMatrixOrder order) fungsi.
Status Shear(
IN REAL shearX,
IN REAL shearY,
IN MatrixOrder order = MatrixOrderPrepend)
{
...
GdipShearMatrix(nativeMatrix, shearX, shearY, order);
...
}
Konstruktor Matrix meneruskan alamat variabel pointer GpMatrix (sebagai parameter output) ke fungsi GdipCreateMatrix(GpMatrix **matrix). GdipCreateMatrix membuat dan menginisialisasi variabel GpMatrix internal lalu menetapkan alamat GpMatrix ke variabel pointer. Kemudian konstruktor menyalin nilai penunjuk ke bidang nativeMatrix.
Matrix()
{
GpMatrix *matrix = NULL;
lastResult = DllExports::GdipCreateMatrix(&matrix);
SetNativeMatrix(matrix);
}
VOID SetNativeMatrix(GpMatrix *nativeMatrix)
{
this->nativeMatrix = nativeMatrix;
}
Metode kloning dalam kelas pembungkus tidak menerima parameter tetapi sering meneruskan dua parameter ke fungsi yang mendasar dalam API datar GDI+. Misalnya, metode Matrix::Clone meneruskan nativeMatrix (sebagai parameter input) dan alamat variabel pointer GpMatrix (sebagai parameter output) ke fungsi GdipCloneMatrix. Kode berikut menunjukkan bagaimana metode Matrix::Clone memanggil GdipCloneMatrix(GpMatrix *matrix, GpMatrix **cloneMatrix) fungsi.
Matrix *Clone() const
{
GpMatrix *cloneMatrix = NULL;
...
GdipCloneMatrix(nativeMatrix, &cloneMatrix));
...
return new Matrix(cloneMatrix);
}
Fungsi dalam API datar mengembalikan nilai jenis GpStatus. Enumerasi GpStatus identik dengan enumerasiStatusyang digunakan oleh metode pembungkus. Dalam GdiplusGpStubs.h, GpStatus didefinisikan sebagai berikut:
typedef Status GpStatus;
Sebagian besar metode dalam kelas pembungkus mengembalikan nilai status yang menunjukkan apakah metode berhasil. Namun, beberapa metode pembungkus mengembalikan nilai status. Saat Anda memanggil metode pembungkus yang mengembalikan nilai status, metode pembungkus meneruskan parameter yang sesuai ke fungsi yang mendasar di API datar GDI+. Misalnya, kelas Matriks memiliki metode Matrix::IsInvertible yang melewati bidang nativeMatrix dan alamat variabel BOOL (sebagai parameter output) ke fungsi GdipIsMatrixInvertible . Kode berikut menunjukkan bagaimana metode Matrix::IsInvertible memanggil GdipIsMatrixInvertible(GDIPCONST GpMatrix *matrix, BOOL *result) fungsi.
BOOL IsInvertible() const
{
BOOL result = FALSE;
...
GdipIsMatrixInvertible(nativeMatrix, &result);
return result;
}
Salah satu pembungkus lainnya adalah kelasWarna. Objek Warna memiliki satu bidang jenis ARGB, yang didefinisikan sebagai DWORD. Ketika Anda meneruskan objek Warna ke salah satu metode pembungkus, metode itu melewati bidang ARGB bersama dengan fungsi yang mendasar di API datar GDI+. Kode berikut menunjukkan bagaimana metode Pen::SetColor memanggil fungsi GdipSetPenColor(GpPen *pen, ARGB argb). Metode Color::GetValue mengembalikan nilai bidang ARGB.
Status SetColor(IN const Color& color)
{
...
GdipSetPenColor(nativePen, color.GetValue());
}
Topik berikut menunjukkan hubungan antara API datar GDI+ dan metode pembungkus C++.
- AdjustableArrowCap Functions
- Bitmap Functions
- Brush Functions
- CachedBitmap Functions
- CustomLineCap Functions
- Fungsi Font
- FontFamilyFunctions
- Graphics Functions
- GraphicsPath Functions
- Fungsi HatchBrush
- Image Functions
- Fungsi ImageAttributes
- Fungsi LinearGradientBrush
- Matrix Functions
- Memory Functions
- Notification Functions
- PathGradientBrush Functions
- PathIterator Functions
- Fungsi Pena
- Fungsi Wilayah
- Fungsi SolidBrush
- Fungsi Format String
- Text Functions
- Fungsi Kuas Tekstur