Cài Đặt Font Chữ
Trước đây khi phát triển game, mình từng muốn sử dụng phông chữ thư pháp Lệ (Li Thư) nhưng gặp vấn đề vì không phải máy tính nào cũng cài sẵn kiểu chữ này. Để giải quyết, mình đã nghiên cứu và tìm ra phương pháp tích hợp font chữ vào ứng dụng một cách linh hoạt.
Giải pháp chi tiết:
-
Chuẩn bị tệp font chữ:
- Sao chép tệp .ttf/.otf của phông Li Thư vào thư mục cài đặt của phần mềm
- Đảm bảo bản quyền sử dụng font để tránh rủi ro pháp lý
-
Quy trình đăng ký font tạm thời:
1 2 3 4 5 6 7 8
// Thêm font vào hệ thống int fontID = AddFontResource(L"Duong_dan/LeShu.ttf"); if(fontID == 0) { // Xử lý lỗi: Kiểm tra đường dẫn, định dạng font } // Thông báo hệ thống cập nhật danh sách font PostMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
-
Sử dụng font trong ứng dụng:
1 2 3 4 5 6 7 8 9
HFONT hFont = CreateFont( 24, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Li Thư"); // Tên font phải trùng với tên trong tệp
-
Dọn dẹp tài nguyên khi không dùng:
1 2 3
if(RemoveFontResource(L"Duong_dan/LeShu.ttf")) { PostMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); }
Lưu ý quan trọng:
- Cần chạy ứng dụng với quyền Administrator để đảm bảo có thể ghi vào registry
- Kiểm tra xem font đã tồn tại trước khi thêm để tránh trùng lặp
- Với Windows 10 trở lên, có thể sử dụng DirectWrite API để tải font từ bộ nhớ thay vì cài đặt hệ thống
- Luôn kèm theo cơ chế fallback font cho trường hợp font chính không tải được
Các lỗi thường gặp:
- Lỗi 0x800700C1: Tệp font bị hỏng hoặc định dạng không hỗ trợ
- Lỗi 0x80070005: Thiếu quyền truy cập ghi vào HKEY_LOCAL_MACHINE
- Font hiển thị không đúng tên: Do tên font trong tệp khác với tên gọi trong hệ thống
Phương pháp này đặc biệt hữu ích khi phát triển ứng dụng đa nền tảng hoặc game indie cần đảm bảo tính nhất quán về giao diện trên nhiều hệ thống khác nhau.