Tôi đang cố gắng tạo danh sách phông chữ để người dùng chọn. Tôi đang làm điều này bằng cách sử dụng hàm EnumFontFamiliesEx
nhưng không may, danh sách phông chữ được trả lại quá dài. Có rất nhiều phông chữ phụ có vẻ phù phiếm, trùng lặp, cho một ngôn ngữ khác hoặc không mong muốn hiển thị cho người dùng. Ảnh chụp màn hình của tôi minh họa tốt nhất phần rác mà tôi đang cố lọc ra.Quá nhiều phông chữ khi liệt kê bằng hàm EnumFontFamiliesEx
Mã của tôi để gọi EnumFontFamiliesEx
trông như thế này:
LOGFONT lf;
memset(&lf, 0, sizeof(lf));
lf.lfCharSet = DEFAULT_CHARSET;
// screenDC is result of CreateCompatibleDC(NULL)
EnumFontFamiliesEx(screenDC, &lf, GetFontsCallback, NULL, 0);
Danh sách kết quả sẽ như thế này, sau khi phân loại theo thứ tự abc và loại bỏ phông chữ với tên mặt trùng lặp:
Như bạn có thể xem, hộp thoại phổ biến phông chữ ChooseFont
hiển thị danh sách phông chữ rất hợp lý thân thiện với người dùng và có ý nghĩa. Mặt khác, mã của tôi hiển thị một danh sách dài các phông chữ bổ sung: phông chữ bắt đầu bằng "@" (tại sao? Chúng là gì?), 3 biến thể phông chữ Arial và một số phông chữ khác không rõ mục đích như Aheroni, Andalus, Angsana mới, AngsanaUPC, và như vậy. Thật điên rồ.
Làm cách nào để lọc danh sách phông chữ được trả về bởi EnumFontFamiliesEx
sao cho nó chính xác khớp với danh sách được hiển thị trong hộp thoại ChooseFont
?
Các tài liệu là khá rõ ràng rằng một vài sự đối số sẽ thay đổi số/loại phông chữ được trả về. Bạn đang chuyển sang mặc định. Bạn đã cố gắng cụ thể hơn chưa? –
Còn việc thêm tìm kiếm và bộ lọc trong giao diện người dùng của bạn thì sao? –
Đây là thiên hướng văn hóa khá nặng. Người dùng Đông Á của bạn sẽ tìm thấy thứ đáng giá để chọn trong hộp thoại đó. Giống như tất cả những người có một @ ở phía trước của nó. Phông chữ hỗ trợ văn bản dọc. Bạn chắc chắn có thể khắc phục sự cố đó, gỡ cài đặt phông chữ mà bạn không quan tâm. –