2010-03-11 52 views
7

Giả sử bạn có một chuỗi có văn bản trong hai hoặc nhiều tập lệnh. Khi bạn sử dụng chức năng GDI như TextOut, (phiên bản hiện đại) Windows sẽ thực hiện "liên kết phông chữ". Đó là, GDI sẽ vẽ những gì nó có thể với phông chữ được lựa chọn của bạn và vẽ phần còn lại trong một phông chữ thích hợp mà nó chọn tự động. Ví dụ: nếu một phần văn bản của bạn bằng tiếng Anh (sử dụng bảng chữ cái La Mã) và một phần là tiếng Trung Quốc (sử dụng ký tự CJK) và bạn đã chọn Arial, phần tiếng Anh sẽ được vẽ bằng Arial và phần tiếng Trung Quốc sẽ được vẽ bằng một phông chữ khác có glyphs CJK.Có thể xác định phông chữ Windows chọn để liên kết phông chữ không?

Câu hỏi của tôi là, có cách nào để xác định phông chữ nào TextOut sẽ chọn (hoặc đã chọn) để liên kết phông chữ không?

Tôi phải vẽ một số văn bản với API Uniscribe cấp thấp, không liên kết phông chữ tự động. Tôi đã thực hiện liên kết phông chữ của riêng mình, nhưng đôi khi thuật toán của tôi chọn một phông chữ khác với TextOut không cho cùng một văn bản. Tôi đang cố gắng để hiểu thuật toán Windows tốt hơn, nhưng tôi không thực sự tốt trong việc xác định phông chữ trên tầm nhìn (đặc biệt là trong các kịch bản không quen thuộc).

Trả lời

2

Phông chữ được chọn bởi mục nhập sổ đăng ký. Nó được mô tả tốt trong this article. Trích dẫn phần có liên quan:

Nếu phông chữ liên kết được kích hoạt trên thiết bị của bạn, bạn có thể kiểm tra registry bằng cách liệt kê các khóa con của khóa registry tại HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ FontLink \ SystemLink để xác định ánh xạ của các phông chữ được liên kết phông chữ cơ bản. Bạn có thể thêm liên kết bằng cách sử dụng Regedit để tạo thêm các khóa con .

+3

Cảm ơn, đó là một tài nguyên tuyệt vời. Nhưng tôi đã đọc trong một blog khác rằng các khóa đăng ký đó chỉ có khả năng tương thích ngược và chúng không thực sự thúc đẩy liên kết phông chữ nữa. Ví dụ, trên máy tính của tôi TextOut sẽ làm phông chữ liên kết cho phông chữ cơ bản mà không phải là một phần của registry. Và đó không phải là dự phòng phông chữ, vì phông chữ được chọn cho các tập lệnh khác khác nhau tùy thuộc vào phông chữ cơ bản. –

+0

Kiểm tra IMLangFontLink: http://msdn.microsoft.com/en-us/library/aa767872%28v=VS.85%29.aspx –

+0

Tôi đã sử dụng IMLangFontLink2 trong lần lặp lại trước đó, nhưng nó gây ra sự cố khi tôi trộn các tập lệnh LTR với các tập lệnh RTL. Tôi nghĩ rằng đó là một giải pháp khá cũ và nó có thể vẫn còn cho khả năng tương thích ngược. –

Các vấn đề liên quan