Fungsi CreateFontA (wingdi.h)
Fungsi CreateFont membuat font logis dengan karakteristik yang ditentukan. Font logis kemudian dapat dipilih sebagai font untuk perangkat apa pun.
Sintaks
HFONT CreateFontA(
[in] int cHeight,
[in] int cWidth,
[in] int cEscapement,
[in] int cOrientation,
[in] int cWeight,
[in] DWORD bItalic,
[in] DWORD bUnderline,
[in] DWORD bStrikeOut,
[in] DWORD iCharSet,
[in] DWORD iOutPrecision,
[in] DWORD iClipPrecision,
[in] DWORD iQuality,
[in] DWORD iPitchAndFamily,
[in] LPCSTR pszFaceName
);
Parameter
[in] cHeight
Tinggi, dalam unit logis, dari sel karakter font atau karakter. Nilai tinggi karakter (juga dikenal sebagai tinggi em) adalah nilai tinggi sel karakter dikurangi nilai internal terkemuka. Pemeta font menginterpretasikan nilai yang ditentukan dalam nHeight dengan cara berikut.
Nilai | Makna |
---|---|
|
Pemeta font mengubah nilai ini menjadi unit perangkat dan mencocokkannya dengan tinggi sel font yang tersedia. |
|
Pemeta font menggunakan nilai tinggi default saat mencari kecocokan. |
|
Pemeta font mengubah nilai ini menjadi unit perangkat dan mencocokkan nilai absolutnya dengan tinggi karakter font yang tersedia. |
Untuk semua perbandingan tinggi, pemeta font mencari font terbesar yang tidak melebihi ukuran yang diminta.
Pemetaan ini terjadi ketika font digunakan untuk pertama kalinya.
Untuk mode pemetaan MM_TEXT, Anda bisa menggunakan rumus berikut untuk menentukan tinggi font dengan ukuran titik tertentu:
nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
[in] cWidth
Lebar rata-rata, dalam unit logis, karakter dalam font yang diminta. Jika nilai ini nol, pemeta font memilih nilai kecocokan terdekat. Nilai kecocokan terdekat ditentukan dengan membandingkan nilai absolut perbedaan antara rasio aspek perangkat saat ini dan rasio aspek digital font yang tersedia.
[in] cEscapement
Sudut, dalam sepuluh derajat, antara vektor pelarian dan sumbu x perangkat. Vektor escapement sejajar dengan garis dasar baris teks.
Saat mode grafik diatur ke GM_ADVANCED, Anda dapat menentukan sudut escapement string secara independen dari sudut orientasi karakter string.
Saat mode grafik diatur ke GM_COMPATIBLE, nEscapement menentukan escapement dan orientasi. Anda harus mengatur nEscapement dan nOrientation ke nilai yang sama.
[in] cOrientation
Sudut, dalam persepuluh derajat, antara garis dasar setiap karakter dan sumbu x perangkat.
[in] cWeight
Bobot font dalam rentang 0 hingga 1000. Misalnya, 400 normal dan 700 tebal. Jika nilai ini nol, bobot default akan digunakan.
Nilai berikut didefinisikan untuk kenyamanan.
[in] bItalic
Menentukan font miring jika diatur ke TRUE.
[in] bUnderline
Menentukan font bergaris bawah jika diatur ke TRUE.
[in] bStrikeOut
Font strikeout jika diatur ke TRUE.
[in] iCharSet
Set karakter. Nilai berikut telah ditentukan sebelumnya:
- ANSI_CHARSET
- BALTIC_CHARSET
- CHINESEBIG5_CHARSET
- DEFAULT_CHARSET
- EASTEUROPE_CHARSET
- GB2312_CHARSET
- GREEK_CHARSET
- HANGUL_CHARSET
- MAC_CHARSET
- OEM_CHARSET
- RUSSIAN_CHARSET
- SHIFTJIS_CHARSET
- SYMBOL_CHARSET
- TURKISH_CHARSET
- VIETNAMESE_CHARSET
- JOHAB_CHARSET
- ARABIC_CHARSET
- HEBREW_CHARSET
- THAI_CHARSET
DEFAULT_CHARSET diatur ke nilai berdasarkan lokal sistem saat ini. Misalnya, ketika lokal sistem adalah bahasa Inggris (Amerika Serikat), itu ditetapkan sebagai ANSI_CHARSET.
Font dengan set karakter lain mungkin ada di sistem operasi. Jika aplikasi menggunakan font dengan kumpulan karakter yang tidak dikenal, aplikasi tidak boleh mencoba menerjemahkan atau menginterpretasikan string yang dirender dengan font tersebut.
Untuk memastikan hasil yang konsisten saat membuat font, jangan tentukan OEM_CHARSET atau DEFAULT_CHARSET. Jika Anda menentukan nama typeface dalam parameter lpszFace , pastikan nilai fdwCharSet cocok dengan kumpulan karakter typeface yang ditentukan dalam lpszFace.
[in] iOutPrecision
Presisi output. Presisi output menentukan seberapa dekat output harus cocok dengan tinggi, lebar, orientasi karakter, escapement, pitch, dan jenis font font yang diminta. Ini bisa menjadi salah satu nilai berikut.
Aplikasi dapat menggunakan nilai OUT_DEVICE_PRECIS, OUT_RASTER_PRECIS, OUT_TT_PRECIS, dan OUT_PS_ONLY_PRECIS untuk mengontrol bagaimana pemeta font memilih font ketika sistem operasi berisi lebih dari satu font dengan nama yang ditentukan. Misalnya, jika sistem operasi berisi font bernama Simbol dalam bentuk raster dan TrueType, menentukan OUT_TT_PRECIS memaksa pemeta font untuk memilih versi TrueType. Menentukan OUT_TT_ONLY_PRECIS memaksa pemeta font untuk memilih font TrueType, meskipun harus mengganti font TrueType dengan nama lain.
[in] iClipPrecision
Presisi kliping. Presisi kliping menentukan cara mengklip karakter yang sebagian berada di luar wilayah kliping. Ini bisa menjadi satu atau beberapa nilai berikut.
[in] iQuality
Kualitas output. Kualitas output menentukan seberapa hati-hati GDI harus mencoba mencocokkan atribut logical-font dengan font fisik aktual. Ini bisa menjadi salah satu nilai berikut.
Jika kualitas output DEFAULT_QUALITY, DRAFT_QUALITY, atau PROOF_QUALITY, maka font diantisipasi jika parameter sistem SPI_GETFONTSMOOTHING TRUE. Pengguna dapat mengontrol parameter sistem ini dari Panel Kontrol. (Kata-kata yang tepat dari pengaturan di panel Kontrol tergantung pada versi Windows, tetapi akan menjadi kata-kata untuk efek "Halus tepi font layar".)
[in] iPitchAndFamily
Pitch dan keluarga font. Dua bit berurutan rendah menentukan nada font dan bisa menjadi salah satu nilai berikut:
- DEFAULT_PITCH
- FIXED_PITCH
- VARIABLE_PITCH
Aplikasi dapat menentukan nilai untuk parameter fdwPitchAndFamily dengan menggunakan operator Boolean OR untuk menggabungkan konstanta pitch dengan konstanta keluarga.
Keluarga font menggambarkan tampilan font secara umum. Mereka dimaksudkan untuk menentukan font ketika typeface yang tepat yang diminta tidak tersedia.
[in] pszFaceName
Penunjuk ke string null-terminated yang menentukan nama typeface font. Panjang string ini tidak boleh melebihi 32 karakter, termasuk karakter null yang mengakhiri. Fungsi EnumFontFamilies dapat digunakan untuk menghitung nama typeface dari semua font yang saat ini tersedia. Untuk informasi selengkapnya, lihat Keterangan.
Jika lpszFacenull atau string kosong, GDI menggunakan font pertama yang cocok dengan atribut lain yang ditentukan.
Mengembalikan nilai
Jika fungsi berhasil, nilai yang dikembalikan adalah handel ke font logis.
Jika fungsi gagal, nilai yang dikembalikan adalah NULL.
Keterangan
Saat Anda tidak lagi memerlukan font, panggil fungsi DeleteObject untuk menghapusnya.
Untuk membantu melindungi hak cipta vendor yang menyediakan font untuk Windows, aplikasi harus selalu melaporkan nama yang tepat dari font yang dipilih. Karena font yang tersedia dapat bervariasi dari sistem ke sistem, jangan berasumsi bahwa font yang dipilih selalu sama dengan font yang diminta. Misalnya, jika Anda meminta font bernama Palatino, tetapi tidak ada font seperti itu yang tersedia di sistem, pemeta font akan menggantikan font yang memiliki atribut serupa tetapi nama yang berbeda. Selalu laporkan nama font yang dipilih kepada pengguna.
Untuk mendapatkan font yang sesuai pada versi bahasa OS yang berbeda, panggil EnumFontFamiliesEx dengan karakteristik font yang diinginkan dalam struktur LOGFONT , lalu ambil nama typeface yang sesuai dan buat font menggunakan CreateFont atau CreateFontIndirect.
Pemeta font untuk CreateFont,CreateFontIndirect, dan CreateFontIndirectEx mengenali bahasa Inggris dan nama typeface yang dilokalkan, terlepas dari lokalnya.
Situasi berikut tidak mendukung antialias ClearType:
- Teks dirender pada printer.
- Tampilan diatur untuk 256 warna atau kurang.
- Teks dirender ke klien server terminal.
- Font bukan font TrueType atau font OpenType dengan kerangka TrueType. Misalnya, berikut ini tidak mendukung antialias ClearType: Font tipe 1, font Postscript OpenType tanpa kerangka TrueType, font bitmap, font vektor, dan font perangkat.
- Font memiliki bitmap yang disematkan, hanya untuk ukuran font yang berisi bitmap yang disematkan. Misalnya, ini umumnya terjadi dalam font Asia Timur.
Contoh
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_PAINT:
{
RECT rect;
HFONT hFontOriginal, hFont1, hFont2, hFont3;
hdc = BeginPaint(hWnd, &ps);
//Logical units are device dependent pixels, so this will create a handle to a logical font that is 48 pixels in height.
//The width, when set to 0, will cause the font mapper to choose the closest matching value.
//The font face name will be Impact.
hFont1 = CreateFont(48,0,0,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Impact"));
hFontOriginal = (HFONT)SelectObject(hdc, hFont1);
//Sets the coordinates for the rectangle in which the text is to be formatted.
SetRect(&rect, 100,100,700,200);
SetTextColor(hdc, RGB(255,0,0));
DrawText(hdc, TEXT("Drawing Text with Impact"), -1,&rect, DT_NOCLIP);
//Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
//The width, when set to 20, will cause the font mapper to choose a font which, in this case, is stretched.
//The font face name will be Times New Roman. This time nEscapement is at -300 tenths of a degree (-30 degrees)
hFont2 = CreateFont(36,20,-300,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Times New Roman"));
SelectObject(hdc,hFont2);
//Sets the coordinates for the rectangle in which the text is to be formatted.
SetRect(&rect, 100, 200, 900, 800);
SetTextColor(hdc, RGB(0,128,0));
DrawText(hdc, TEXT("Drawing Text with Times New Roman"), -1,&rect, DT_NOCLIP);
//Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
//The width, when set to 10, will cause the font mapper to choose a font which, in this case, is compressed.
//The font face name will be Arial. This time nEscapement is at 250 tenths of a degree (25 degrees)
hFont3 = CreateFont(36,10,250,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY, VARIABLE_PITCH,TEXT("Arial"));
SelectObject(hdc,hFont3);
//Sets the coordinates for the rectangle in which the text is to be formatted.
SetRect(&rect, 500, 200, 1400, 600);
SetTextColor(hdc, RGB(0,0,255));
DrawText(hdc, TEXT("Drawing Text with Arial"), -1,&rect, DT_NOCLIP);
SelectObject(hdc,hFontOriginal);
DeleteObject(hFont1);
DeleteObject(hFont2);
DeleteObject(hFont3);
EndPaint(hWnd, &ps);
break;
}
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
Untuk contoh lain, lihat "Mengatur Font untuk Menu-Item String Teks" di Menggunakan Menu.
Catatan
Header wingdi.h mendefinisikan CreateFont sebagai alias yang secara otomatis memilih versi ANSI atau Unicode dari fungsi ini berdasarkan definisi konstanta pra-prosesor 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.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 2000 Professional [hanya aplikasi desktop] |
Server minimum yang didukung | Windows 2000 Server [hanya aplikasi desktop] |
Target Platform | Windows |
Header | wingdi.h (sertakan Windows.h) |
Pustaka | Gdi32.lib |
DLL | Gdi32.dll |
Lihat juga
EnumFontFamilies