Fungsi GetCharacterPlacementA (wingdi.h)
Fungsi GetCharacterPlacement
Meskipun fungsi ini pernah memadai untuk bekerja dengan string karakter, kebutuhan untuk bekerja dengan meningkatnya jumlah bahasa dan skrip telah merendernya usang. Ini telah digantikan oleh fungsionalitas modul Uniscribe. Untuk informasi selengkapnya, lihat Uniscribe.
Disarankan agar aplikasi menggunakan fungsi
Nilai GCP_NODIACRITICS tidak lagi ditentukan dan tidak boleh digunakan.
DWORD GetCharacterPlacementA(
[in] HDC hdc,
[in] LPCSTR lpString,
[in] int nCount,
[in] int nMexExtent,
[in, out] LPGCP_RESULTSA lpResults,
[in] DWORD dwFlags
);
[in] hdc
Handel ke konteks perangkat.
[in] lpString
Penunjuk ke string karakter untuk diproses. String tidak perlu dihentikan nol, karena nCount menentukan panjang string.
[in] nCount
Panjang string ditujukkan oleh lpString.
[in] nMexExtent
Tingkat maksimum (dalam unit logis) tempat string diproses. Karakter yang, jika diproses, akan melebihi batas ini diabaikan. Komputasi untuk pengurutan atau array glyph yang diperlukan hanya berlaku untuk karakter yang disertakan. Parameter ini hanya digunakan jika nilai GCP_MAXEXTENT ditentukan dalam parameter
[in, out] lpResults
Penunjuk ke struktur GCP_RESULTS yang menerima hasil fungsi.
[in] dwFlags
Menentukan cara memproses string ke dalam array yang diperlukan. Parameter ini bisa berupa satu atau beberapa nilai berikut.
Nilai | Arti |
---|---|
|
Menentukan bahwa array |
|
Menentukan bagaimana diakritik dalam string ditangani. Jika nilai ini tidak diatur, diakritik diperlakukan sebagai karakter lebar nol. Misalnya, string Ibrani mungkin berisi diakritik, tetapi Anda mungkin tidak ingin menampilkannya.
Gunakan GetFontLanguageInfo untuk menentukan apakah font mendukung diakritik. Jika ya, Anda dapat menggunakan atau tidak menggunakan bendera GCP_DIACRITIC dalam panggilan ke GetCharacterPlacement, tergantung pada kebutuhan aplikasi Anda. |
|
Untuk bahasa yang perlu diurutkan ulang atau bentuk glyph yang berbeda tergantung pada posisi karakter dalam kata, karakter yang tidak dapat diputar sering muncul di halaman kode. Misalnya, di halaman kode Ibrani, ada penanda Left-To-Right dan Right-To-Left, untuk membantu menentukan posisi akhir karakter dalam string output. Biasanya ini tidak ditampilkan dan dihapus dari lpGlyphs |
|
Menentukan bahwa beberapa atau semua karakter dalam string akan ditampilkan menggunakan bentuk selain bentuk standar yang ditentukan dalam font yang saat ini dipilih untuk halaman kode saat ini. Beberapa bahasa, seperti Arab, tidak dapat mendukung pembuatan glyph kecuali nilai ini ditentukan. Sebagai aturan umum, jika GetFontLanguageInfo mengembalikan nilai ini untuk string, nilai ini harus digunakan dengan GetCharacterPlacement. |
|
Menyesuaikan tingkat dalam array lpDx |
|
Gunakan Kashidas serta, atau alih-alih, batas yang disesuaikan untuk memodifikasi panjang string sehingga sama dengan nilai yang ditentukan oleh nMaxExtent. Dalam array lpDx Menggunakan Kashidas untuk membenarkan string dapat mengakibatkan jumlah glyph yang diperlukan lebih besar dari jumlah karakter dalam string input. Karena itu, ketika Kashidas digunakan, aplikasi tidak dapat mengasumsikan bahwa mengatur array menjadi ukuran string input akan cukup. (Kemungkinan maksimum adalah sekitar dxPageWidth/dxAveCharWidth, di mana dxPageWidth adalah lebar dokumen dan dxAveCharWidth adalah lebar karakter rata-rata seperti yang dikembalikan dari panggilan GetTextMetrics). Perhatikan bahwa hanya karena GetFontLanguageInfo mengembalikan bendera GCP_KASHIDA tidak berarti bahwa itu harus digunakan dalam panggilan ke GetCharacterPlacement, hanya saja opsi tersedia. |
|
Gunakan ligasi di mana pun karakter berada. Ligasi terjadi di mana satu glyph digunakan untuk dua karakter atau lebih. Misalnya, huruf a dan e dapat dilimpahkan ke ?. Namun, agar ini digunakan, baik dukungan bahasa maupun font harus mendukung glyph yang diperlukan (contoh tidak akan diproses secara default dalam bahasa Inggris).
Gunakan GetFontLanguageInfo untuk menentukan apakah font saat ini mendukung ligasi. Jika ya dan maksimum tertentu diperlukan untuk jumlah karakter yang akan memisah, atur angka dalam elemen pertama lpGlyphs array. Jika ligasi normal diperlukan, atur nilai ini ke nol. Jika GCP_LIGATE tidak ditentukan, tidak ada ligasi yang akan terjadi. Lihat GCP_RESULTS untuk informasi selengkapnya. Jika nilai GCP_REORDER biasanya diperlukan untuk set karakter tetapi tidak ditentukan, output tidak akan berarti kecuali string yang diteruskan sudah dalam urutan visual (yaitu, hasil yang dimasukkan ke dalam lpGcpResults->lpOutString dalam satu panggilan ke GetCharacterPlacement adalah string input panggilan kedua). Perhatikan bahwa hanya karena GetFontLanguageInfo mengembalikan bendera GCP_LIGATE tidak berarti bahwa itu harus digunakan dalam panggilan ke GetCharacterPlacement, hanya saja opsi tersedia. |
|
Tingkat komputasi string hanya selama tingkat yang dihasilkan, dalam unit logis, tidak melebihi nilai yang ditentukan oleh parameter nMaxExtent. |
|
Bahasa tertentu saja. Ambil alih penanganan normal netral dan perlakukan sebagai karakter kuat yang cocok dengan urutan pembacaan string. Hanya berguna dengan bendera GCP_REORDER. |
|
Bahasa tertentu saja. Ambil alih penanganan numerik normal dan perlakukan sebagai karakter kuat yang cocok dengan urutan pembacaan string. Hanya berguna dengan bendera GCP_REORDER. |
|
Arab/Thailand saja. Gunakan glyph Latin standar untuk angka dan ambil alih default sistem. Untuk menentukan apakah opsi ini tersedia dalam bahasa font, gunakan GetStringTypeEx untuk melihat apakah bahasa mendukung lebih dari satu format angka. |
|
Arab/Thailand saja. Gunakan glyph lokal untuk karakter numerik dan ambil alih default sistem. Untuk menentukan apakah opsi ini tersedia dalam bahasa font, gunakan GetStringTypeEx untuk melihat apakah bahasa mendukung lebih dari satu format angka. |
|
Menyusun ulang string. Gunakan untuk bahasa yang bukan SBCS dan urutan baca kiri-ke-kanan. Jika nilai ini tidak ditentukan, string diasumsikan sudah dalam urutan tampilan.
Jika bendera ini diatur untuk bahasa Semitic dan array lpClass digunakan, dua elemen pertama array digunakan untuk menentukan urutan pembacaan di luar batas string. GCP_CLASS_PREBOUNDRTL dan GCP_CLASS_PREBOUNDLTR dapat digunakan untuk mengatur pesanan. Jika tidak ada urutan prasetel yang diperlukan, atur nilai ke nol. Nilai-nilai ini dapat dikombinasikan dengan nilai lain jika bendera GCPCLASSIN diatur. Jika nilai GCP_REORDER tidak ditentukan, parameter lpString Gunakan GetFontLanguageInfo |
|
Bahasa semitik saja. Menentukan bahwa karakter yang dapat ditukar tidak diatur ulang. Misalnya, dalam string kanan-ke-kiri, '(' dan ')' tidak dibalik. |
|
Gunakan pasangan kerning dalam font (jika ada) saat membuat array lebar. Gunakan GetFontLanguageInfo untuk menentukan apakah font saat ini mendukung pasangan kerning.
Perhatikan bahwa hanya karena GetFontLanguageInfo mengembalikan bendera GCP_USEKERNING tidak berarti bahwa itu harus digunakan dalam panggilan untuk GetCharacterPlacement, hanya bahwa opsi tersedia. Sebagian besar font TrueType memiliki tabel kerning, tetapi Anda tidak perlu menggunakannya. |
Disarankan agar aplikasi menggunakan fungsi
Nilai GCP_NODIACRITICS tidak lagi ditentukan dan tidak boleh digunakan.
Jika fungsi berhasil, nilai yang dikembalikan adalah lebar dan tinggi string dalam unit logis. Lebar adalah kata berurutan rendah dan tingginya adalah kata berurutan tinggi.
Jika fungsi gagal, nilai yang dikembalikan adalah nol.
GetCharacterPlacement memastikan bahwa aplikasi dapat memproses teks dengan benar terlepas dari pengaturan internasional dan jenis font yang tersedia. Aplikasi menggunakan fungsi ini sebelum menggunakan fungsi
Menggunakan GetCharacterPlacement untuk mengambil penspasian antarkarakter dan array indeks tidak selalu diperlukan kecuali pembenaran atau kerning diperlukan. Untuk font non-Latin, aplikasi dapat meningkatkan kecepatan fungsi
Perhatikan bahwa indeks glyph yang dikembalikan dalam GCP_RESULTS.lpGlyphs khusus untuk font saat ini dalam konteks perangkat dan hanya boleh digunakan untuk menggambar teks dalam konteks perangkat sementara font tersebut tetap dipilih.
Saat pembenaran komputasi, jika karakter berikutnya dalam string adalah spasi, fungsi mengurangi panjang string dan menghapus spasi sebelum menghitung pembenaran. Jika array hanya terdiri dari spasi, fungsi mengembalikan kesalahan.
Jika lebar logika kurang dari lebar karakter utama dalam string input, GCP_RESULTS.nMaxFit mengembalikan nilai yang buruk. Untuk kasus ini, panggil GetCharacterPlacement
Catatan
Header wingdi.h mendefinisikan GetCharacterPlacement sebagai alias yang secara otomatis memilih versi ANSI atau Unicode dari fungsi ini berdasarkan definisi konstanta preprosektor UNICODE. Mencampur penggunaan alias encoding-netral dengan kode yang tidak mengodekan-netral dapat menyebabkan ketidakcocokan yang mengakibatkan kesalahan kompilasi atau runtime. Untuk informasi selengkapnya, lihat Konvensi untuk Prototipe Fungsi.
Syarat | Nilai |
---|---|
klien minimum yang didukung | Windows 2000 Professional [hanya aplikasi desktop] |
server minimum yang didukung |
Windows 2000 Server [hanya aplikasi desktop] |
Platform Target |
Windows |
Header |
wingdi.h (termasuk Windows.h) |
Pustaka |
Gdi32.lib |
DLL |
Gdi32.dll |
Fungsi Font dan Teks
GetTextMetrics