Bagikan melalui


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
> 0
Pemeta font mengubah nilai ini menjadi unit perangkat dan mencocokkannya dengan tinggi sel font yang tersedia.
0
Pemeta font menggunakan nilai tinggi default saat mencari kecocokan.
< 0
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.

Berat Nilai
FW_DONTCARE
0
FW_THIN
100
FW_EXTRALIGHT
200
FW_ULTRALIGHT
200
FW_LIGHT
300
FW_NORMAL
400
FW_REGULAR
400
FW_MEDIUM
500
FW_SEMIBOLD
600
FW_DEMIBOLD
600
FW_BOLD
700
FW_EXTRABOLD
800
FW_ULTRABOLD
800
FW_HEAVY
900
FW_BLACK
900

[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
Windows edisi bahasa Korea:
  • JOHAB_CHARSET
Windows edisi bahasa Timur Tengah:
  • ARABIC_CHARSET
  • HEBREW_CHARSET
Windows edisi bahasa Thailand:
  • THAI_CHARSET
Nilai OEM_CHARSET menentukan set karakter yang bergantung pada sistem operasi.

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.

Nilai Makna
OUT_CHARACTER_PRECIS
Tidak digunakan.
OUT_DEFAULT_PRECIS
Perilaku pemeta font default.
OUT_DEVICE_PRECIS
Menginstruksikan pemeta font untuk memilih font Perangkat ketika sistem berisi beberapa font dengan nama yang sama.
OUT_OUTLINE_PRECIS
Nilai ini menginstruksikan pemeta font untuk memilih dari TrueType dan font berbasis kerangka lainnya.
OUT_PS_ONLY_PRECIS
Menginstruksikan pemeta font untuk memilih dari font PostScript saja. Jika tidak ada font PostScript yang diinstal dalam sistem, pemeta font kembali ke perilaku default.
OUT_RASTER_PRECIS
Menginstruksikan pemeta font untuk memilih font raster ketika sistem berisi beberapa font dengan nama yang sama.
OUT_STRING_PRECIS
Nilai ini tidak digunakan oleh pemeta font, tetapi dikembalikan ketika font raster dijumlahkan.
OUT_STROKE_PRECIS
Nilai ini tidak digunakan oleh pemeta font, tetapi dikembalikan ketika TrueType, font berbasis kerangka lainnya, dan font vektor dijumlahkan.
OUT_TT_ONLY_PRECIS
Menginstruksikan pemeta font untuk memilih dari font TrueType saja. Jika tidak ada font TrueType yang diinstal dalam sistem, pemeta font kembali ke perilaku default.
OUT_TT_PRECIS
Menginstruksikan pemeta font untuk memilih font TrueType ketika sistem berisi beberapa font dengan nama yang sama.
 

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.

Nilai Makna
CLIP_CHARACTER_PRECIS
Tidak digunakan.
CLIP_DEFAULT_PRECIS
Menentukan perilaku kliping default.
CLIP_DFA_DISABLE
Windows XP SP1: Menonaktifkan asosiasi font untuk font. Perhatikan bahwa bendera ini tidak dijamin akan berpengaruh pada platform apa pun setelah Windows Server 2003.
CLIP_EMBEDDED
Anda harus menentukan bendera ini untuk menggunakan font baca-saja yang disematkan.
CLIP_LH_ANGLES
Ketika nilai ini digunakan, rotasi untuk semua font tergantung pada apakah orientasi sistem koordinat bertangan kiri atau tangan kanan.

Jika tidak digunakan, font perangkat selalu berputar berlawanan arah jaga, tetapi rotasi font lain tergantung pada orientasi sistem koordinat.

Untuk informasi selengkapnya tentang orientasi sistem koordinat, lihat deskripsi parameter nOrientation

CLIP_MASK
Tidak digunakan.
CLIP_DFA_OVERRIDE
Menonaktifkan asosiasi font untuk font. Ini identik dengan CLIP_DFA_DISABLE, tetapi dapat memiliki masalah dalam beberapa situasi; bendera yang disarankan untuk digunakan adalah CLIP_DFA_DISABLE.
CLIP_STROKE_PRECIS
Tidak digunakan oleh pemeta font, tetapi dikembalikan ketika font raster, vektor, atau TrueType dijumlahkan.

Untuk kompatibilitas, nilai ini selalu dikembalikan saat menghitung font.

CLIP_TT_ALWAYS
Tidak digunakan.

[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.

Nilai Makna
ANTIALIASED_QUALITY
Font antialias, atau dihaluskan, jika font mendukungnya dan ukuran font tidak terlalu kecil atau terlalu besar.
CLEARTYPE_QUALITY
Jika diatur, teks dirender (jika memungkinkan) menggunakan metode antialias ClearType. Lihat Keterangan untuk informasi selengkapnya.
DEFAULT_QUALITY
Penampilan font tidak masalah.
DRAFT_QUALITY
Tampilan font kurang penting daripada ketika nilai PROOF_QUALITY digunakan. Untuk font raster GDI, penskalaan diaktifkan, yang berarti bahwa lebih banyak ukuran font tersedia, tetapi kualitasnya mungkin lebih rendah. Font tebal, miring, garis bawah, dan strikeout disintesis, jika perlu.
NONANTIALIASED_QUALITY
Font tidak pernah diantisipasi, yaitu, penghalusan font tidak dilakukan.
PROOF_QUALITY
Kualitas karakter font lebih penting daripada pencocokan yang tepat dari atribut logical-font. Untuk font raster GDI, penskalaan dinonaktifkan dan ukuran font terdekat dipilih. Meskipun ukuran font yang dipilih mungkin tidak dipetakan persis ketika PROOF_QUALITY digunakan, kualitas font tinggi dan tidak ada distorsi penampilan. Font tebal, miring, garis bawah, dan strikeout disintesis, jika perlu.
 

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
Empat bit berurutan tinggi menentukan keluarga font dan bisa menjadi salah satu nilai berikut.
Nilai Makna
FF_DECORATIVE
Font baru. Bahasa Inggris Lama adalah contohnya.
FF_DONTCARE
Gunakan font default.
FF_MODERN
Font dengan lebar goresan konstan, dengan atau tanpa serif. Pica, Elite, dan Courier New adalah contohnya.
FF_ROMAN
Font dengan lebar goresan variabel dan dengan serif. MS Serif adalah contohnya.
FF_SCRIPT
Font yang dirancang agar terlihat seperti tulisan tangan. Skrip dan Kursif adalah contoh.
FF_SWISS
Font dengan lebar goresan variabel dan tanpa serif. MS? Sans Serif adalah contohnya.
 

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

CreateFontIndirect

CreateFontIndirectEx

DeleteObject

EnumFontFamilies

EnumFontFamiliesEx

EnumFonts

Fungsi Font dan Teks

Gambaran Umum Font dan Teks

LOGFONT

PilihObject