Menentukan panjang string teks-output

Beberapa fungsi font dan text-output memiliki parameter yang menentukan panjang string teks-output. Contoh umumnya adalah parameter cchText dari DrawTextEx.

Masing-masing fungsi ini memiliki versi "ANSI" dan versi Unicode (misalnya, DrawTextExA dan DrawTextExW). Untuk versi "ANSI" dari setiap fungsi, panjangnya ditentukan sebagai jumlah BYTE dan untuk fungsi Unicode ditentukan sebagai hitungan WORD.

Ini tradisional untuk menganggap ini sebagai "jumlah karakter". Itu umumnya akurat untuk banyak bahasa, termasuk bahasa Inggris, tetapi tidak akurat secara umum. Dalam string "ANSI", karakter di halaman kode SBCS masing-masing mengambil satu byte, tetapi sebagian besar karakter di halaman kode DBCS mengambil dua byte. Demikian pula, sebagian besar karakter Unicode yang saat ini ditentukan berada di Basic Multilingual Plane (BMP) dan representasi UTF-16 mereka cocok dalam satu WORD, tetapi karakter tambahan diwakili dalam Unicode oleh ''pengganti'', yang memerlukan dua WORD.

Masing-masing fungsi ini membutuhkan jumlah panjang. Untuk versi "ANSI" dari setiap fungsi, panjangnya ditentukan sebagai panjang jumlah BYTE dari string yang tidak termasuk terminator NULL . Untuk fungsi Unicode, jumlah panjang adalah jumlah byte dibagi dengan sizeof(WCHAR), yaitu 2, tidak termasuk terminator NULL . Jumlah karakter adalah jumlah karakter, yang mungkin tidak sama dengan jumlah panjang string. Dalam beberapa kasus, karakter mengambil lebih dari satu BYTE untuk ANSI (misalnya, karakter DBCS ) dan lebih dari satu WORD untuk Unicode (misalnya, karakter pengganti). Selanjutnya, jumlah glyph mungkin tidak sama dengan jumlah karakter karena beberapa karakter mungkin dikomposisikan untuk membuat satu glyph. Jumlah panjang adalah jumlah data. Jumlah karakter adalah jumlah unit yang diproses sebagai satu entitas. Glyph adalah apa yang akan dirender. Misalnya, di Unicode, Anda dapat memiliki string dengan panjang 3, yaitu 2 karakter dan yang menghasilkan 1 glyph yang dirender. Namun, biasanya, sebagian besar string Unicode panjang, jumlah karakter, dan jumlah glyph yang dirender sama.

Anda dapat menggunakan _tcslen() untuk mendapatkan panjang string. Untuk ANSI, _tcslen() mengembalikan jumlah byte. Untuk Unicode, _tcslen() mengembalikan jumlah WCHAR (yaitu WORD).

Karakter pemrosesan khusus seperti tab dan tanda hubung lunak yang tidak selalu digambar dapat memengaruhi output yang digambar. Mereka disertakan dalam panjang string dan jumlah karakter, tetapi mungkin tidak secara langsung diwakili oleh glyph yang dirender.

Beberapa fungsi ini memungkinkan penelepon untuk menentukan panjang sebagai -1 untuk menunjukkan bahwa string dihentikan null; dalam hal ini fungsi akan menghitung jumlah karakter secara otomatis. Tidak semua fungsi menawarkan kemampuan ini. Itu ditentukan berdasarkan fungsi demi fungsi; lihat dokumentasi fungsi individual.