Udostępnij za pośrednictwem


Tworzenie i zaznaczanie czcionek

Typowe okno dialogowe czcionki upraszcza proces tworzenia i wybierania czcionek. Inicjując strukturę CHOOSEFONT i wywołując funkcję CHOOSEFONT, aplikacja może obsługiwać ten sam interfejs wyboru czcionek, który wcześniej wymagał wielu wierszy kodu niestandardowego. (Aby uzyskać więcej informacji na temat typowego okna dialogowego czcionki, zobacz Common Dialog Box Library.)

Wybór przez użytkownika

Większość operacji tworzenia i wybierania czcionek obejmuje użytkownika. Na przykład aplikacje do przetwarzania wyrazów umożliwiają użytkownikowi wybranie unikatowych czcionek dla nagłówków, przypisów dolnych i tekstu treści. Gdy użytkownik wybierze czcionkę przy użyciu okna dialogowego czcionki i naciśnie przycisk OK, funkcja SELECTFONT inicjuje elementy członkowskie LOGFONT struktury z atrybutami żądanej czcionki. Aby użyć tej czcionki na potrzeby operacji tekstowych, aplikacja musi najpierw utworzyć czcionkę logiczną, a następnie wybrać tę czcionkę w kontekście urządzenia. czcionką logiczną to dostarczony przez aplikację opis idealnej czcionki. Deweloper może utworzyć czcionkę logiczną, wywołując funkcję CreateFont lub CreateFontIndirect. W takim przypadku aplikacja wywoła CreateFontIndirect i dostarczy wskaźnik do struktury LOGFONT zainicjowanej przez CHOOSEFONT. Ogólnie rzecz biorąc, bardziej wydajne jest wywoływanie CreateFontIndirect, ponieważ CreateFont wymaga kilku parametrów, podczas gdy createFontIndirect wymaga tylko jednego wskaźnika LOGFONT.

Aby aplikacja mogła rzeczywiście rozpocząć rysowanie tekstu czcionką logiczną, musi znaleźć najbliższe dopasowanie z czcionek przechowywanych wewnętrznie na urządzeniu i czcionek, których zasoby zostały załadowane do systemu operacyjnego. Czcionki przechowywane na urządzeniu lub w systemie operacyjnym są nazywane czcionkami fizycznymi. Proces znajdowania czcionki fizycznej, która najlepiej pasuje do określonej czcionki logicznej, jest nazywana mapowaniem czcionek. Ten proces występuje, gdy aplikacja wywołuje funkcję SelectObject i dostarcza uchwyt identyfikujący czcionkę logiczną. Mapowanie czcionek odbywa się przy użyciu algorytmu wewnętrznego, który porównuje atrybuty żądanej czcionki logicznej z atrybutami dostępnych czcionek fizycznych. Gdy algorytm mapowania czcionek zakończy wyszukiwanie i określi najbliższe możliwe dopasowanie, funkcja SelectObject zwraca, a aplikacja może rozpocząć rysowanie tekstu przy użyciu nowej czcionki.

Funkcja SetMapperFlags określa, czy algorytm mapowania czcionek wyszukuje tylko czcionki fizyczne z proporcjami zgodnymi z urządzeniem fizycznym. Współczynnik proporcji dla urządzenia jest współczynnikiem utworzonym przez szerokość i wysokość piksela na tym urządzeniu.

Czcionka systemowa (znana również jako powłoka lub czcionka domyślna) jest czcionką używaną do tekstu na paskach tytułu, menu i oknach dialogowych.

Zagadnienia dotyczące zaznaczenia czcionki specjalnej

Chociaż większość operacji wyboru czcionek obejmuje użytkownika, istnieją pewne wystąpienia, w których nie jest to prawdą. Na przykład deweloper może chcieć użyć unikatowej czcionki w aplikacji, aby narysować tekst w oknie sterowania. Aby wybrać odpowiednią czcionkę, aplikacja musi mieć możliwość określenia, jakie czcionki są dostępne, utworzyć czcionkę logiczną opisjącą jedną z tych dostępnych czcionek, a następnie wybrać tę czcionkę w odpowiednim kontekście urządzenia.

Aplikacja może wyliczać dostępne czcionki przy użyciu funkcji EnumFonts lub EnumFontFamil ies. EnumFontFamilies jest zalecane, ponieważ wylicza wszystkie style skojarzone z nazwą rodziny. Może to być przydatne w przypadku czcionek z wieloma lub niezwykłymi stylami oraz czcionek, które przekraczają granice międzynarodowe.

Po wyliczenie dostępnych czcionek i zlokalizowaniu odpowiedniego dopasowania aplikacja powinna użyć wartości zwracanych przez funkcję wyliczania czcionek, aby zainicjować elementy członkowskie struktury LOGFONT. Następnie może wywołać funkcję CreateFontIndirect, przekazując do niej wskaźnik do zainicjowanej struktury LOGFONT. Jeśli funkcja CreateFontIndirect zakończy się pomyślnie, aplikacja może wybrać czcionkę logiczną, wywołując funkcjęSelectObject. Podczas inicjowania elementów członkowskich struktury LOGFONT należy określić określony zestaw znaków w elemencie lfCharSet. Ten element członkowski jest ważny w procesie mapowania czcionek, a wyniki będą niespójne, jeśli ten element członkowski nie zostanie poprawnie zainicjowany. Jeśli określisz nazwę czcionki w lfFaceName składowej struktury LOGFONT, upewnij się, że wartość lfCharSet jest zgodna z zestawem znaków czcionki określonej w lfFaceName. Jeśli na przykład chcesz wybrać czcionkę, taką jak MS Mincho, lfCharSet musi być ustawiona na wstępnie zdefiniowaną wartość SHIFTJIS_CHARSET.

Czcionki dla wielu języków wschodnioazjatyckich mają dwie nazwy czcionek: angielską i zlokalizowaną nazwę. createFont, CreateFontIndirecti CreateFontIndirectEx stosować zlokalizowaną nazwę czcionki dla ustawień regionalnych systemu, które są zgodne z językiem, ale przyjmują nazwę angielskiego czcionki dla wszystkich innych ustawień regionalnych systemu. Najlepszą metodą jest wypróbowanie jednej nazwy, a po niepowodzeniu spróbuj użyć drugiej. Należy pamiętać, że EnumFonts, EnumFontFamiliesi EnumFontFamiliesEx zwracają nazwę angielskiej czcionki, jeśli ustawienia regionalne systemu nie są zgodne z językiem czcionki. Począwszy od systemu Windows 2000, nie jest to już problem, ponieważ maper czcionek dla CreateFont, CreateFontIndirecti CreateFontIndirectEx rozpoznaje jedną nazwę czcionki, niezależnie od ustawień regionalnych.