o ważnej różnicy: chcąc otrzymać czcionkę o określonej wysokości, zamień wy-sokość podaną w punktach na jednostki logiczne, a następnie nadaj polu lfHe-ight...

Jak cię złapią, to znaczy, że oszukiwałeś. Jak nie, to znaczy, że posłużyłeś się odpowiednią taktyką.
Jeśli zmiennej IţIeight nadasz wartość
dodatnią, pole tmHeight wynikowej struktury TEXTMETRIC będzie zawierać
dokładnie tę wartość. (Czasami może między nimi być niewielka różnica, wy-
nikająca prawdopodobnie z zaokrągleń.) Jeśli pole lfHeight przyjmuje wartość
ujemną - będzie ono odpowiadać różnicy wartości pól tmHeight oraz tmlnter-
leading struktury TEXTMETIZIC.
ů lfWidth Jest to pożądana szerokość znaków, wyrażona w jednostkach logicz-
nych. Przeważnie będziesz chciał pozostawić wartość 0 tego pola, pozwalając
systemowi Windows na wybranie odpowiedniej czcionki tylko na podstawie
jej wysokości. Zastosowarue wartości niezerowych nie daje dobrych wyników
dla czcionek rastrowych. W wypadku czcionek TrueType wartości lf 4Vidth różne
od zera mogą być stosowane w celu uzyskiwania czcionek o znakach szer-
szych lub węższych niż tradycyjne. Zmienna ta odpowiada polu tmAveChar
Width struktury TEXTMETRIC. Zastosuj lfYVidth inteligentnie - najpierw na-
dal lel wartość 0, utwórz czcionkę logiczną, wybierz ją w kontekście urządze-
nia, a następnie wywołaj funkcje GetTextMetrics. Spróbuj dostroić wartość pola
tmAveCharWidth, zmniejszając i zwiększając ją procentowo. Teraz spróbuj utwo-
rzyć drugą czcionkę na podstawie wartości tmAveCharWidth.
Kolejne dwa pola określają zakrzywienie i orientację tekstu. Teoretycznie zmien-
na IfEscapement pozwala na umieszczanie łańcucha pisanego w kształcie łuku (jed-
914
Część II: Grafika
nak linia każdej z jego liter pozostaje w poziomie), a lfOrientation umożliwia od-
chylenie poszczególnych liter od poziomu. Niestety, pola te nigdy nie ftxnkcjono-
wały w opisywany sposób. Nawet dzisiaj ich działanie nie jest zgodne z zamie-
rzeniami poza jednym wypadkiem: gdy stosujesz czcionkę TrueType w środowi-
sku Windows NT i jako pierwszą wywołujesz ftxnkcję SetGraphicsMode z usta-
wionym znacznikiem CM ADVANCED. Ostatnie założenie może być spełnione
w programie PICKFONT przez zaznaczerue pola wyboru opcji Adv Grfx Mode.
Eksperymentując z wartościami opisywanych pól pamiętaj, że podstawowa jed-
nostka to dziesięć stopni, a kierunek rotacji jest zgodny z ruchem wskazówek
zegara. Niestety, łatwo podać wartości, które spowodują zniknięcie tekstu Z tego
powodu stosuj wartości z przedziału od 0 do - 600 lub między 3000 i 3600.
ů lfEscapement Jest to kąt podawany w dziesiątkach stopni, mierzony od pozio-
mu w kierunku zgodnym z ruchem wskazówek zegara. Określa położenie
kolejnych liter tekstu w trakcie jego pisania. Oto kilka przykładów:
Wartość Położenie znaków
Od lewej do prawej (domyślne)
900 Z dołu do góry
1800 Od lewej do prawej
2700 Z góry do dołu
W Windows 98 wartość ta decyduje zarówno o zakrzywieniu, jak i orientacji
tekstu pisanego czcionką TrueType. W Windows NT wartość lfEscapement jest
odpowiedzialna także za oba atrybuty tekstu, lecz w wypadku wywołania
funkcji SetGraphicsMode z argumentem GM ADVANCED, IfEscapement funk-
cjonuje zgodnie z dokumentacją.
lfOrientation Jest to kąt podawany w dziesiątkach stopni, mierzony od pozą-
mu w kierunku zgodnym z ruchem wskazówek zegara. Wpływa na wygl d
każdego znaku z osobna. Oto kilka przykładów:
Wartość Położenie znaków
Normalnie (domyślnie)
900 Przekręcone o 90 stopni w prawo
1800 Odwrotnie
2700 Przekręcone o 90 stopni w lewo
Wartość tego pola nie ma znaczenia poza pracą w WindOws NT w trybie gra-
ficznym GM ŽDVANCED.
Pozostałe 10 pól opisano poniżej:
lf iNeight Pozwala określić stopień pogrubiania tekstu. Plik nagłówkowy WINGDI.H
definiuje zestaw stałych, których wartości mogą być przyjmowane przez to pole:
Rozdział 17: Tekst i czcionki
Wartość Identyfikator stałej
FW DONTCARE
100 FW THIN
200 FWţEXTRALIGHT lub FWţULTRALIGHT
300 FWţLIGHT
400 FWţNORMAL lub FW REGULAR
500 F4VţMEDIUM
600 FWţSEMIBOLD lub FW DEMIBOLD
700 FW BOLD
800 FW EXTRABOLD lub FWţULTRABOLD
900 FWţHEAVY lub FW BLACK
Przedstawiona powyżej tabela ma najbardziej złożoną budowę ze znanych mi
tego typu. W rzeczywistości wykorzystywane są zwykle tylko wartości 0 lub
400, definiujące czcionkę zwykłą, albo 700, gdy chcemy nadać jej atrybut po-
grubienia.
ů Ijitalic Wartość niezerowa tego pola jest równoznaczna z nadaruem czcionce
atrybutu kursywy. Kursywa może być symulowana przez Windows dla czcio-
nek rastrowych GDI - system przesuwa górne wiersze bitmapy w prawo. W
wypadku czcionek TrueType Windows stosuje właściwą kursywę lub pochy-
łą wersję danej czcionki.
ů Ifllnderline Nadanie temu polu wartości ruezerowej oznacza zastosowanie
podkreślenia, które jest uzyskiwane w sposób sztuczny dla czcionek GDI -
Windows rysuje poziome linie pod każdym znakiem tekstu, włączając w to
spacje.
ů lfStrike0ut Wartość ruezerowa tego pola jest równoznaczna z przekreśleniem
danej czcionki. Atrybut jest również uzyskiwany metodą syntetyczną przez GDI.
ů lfCharSet Jest to wartość bajtowa, określająca zestaw znaków, do którego ma
należeć czcionka. Więcej informacji o tym polu przedstawię w następnym
podrozdziale, "Zestawy znaków i Unicode". W programie PICKFONT mo-
żesz uzyskać listę kodów dostępnych zestawów znaków, naciskając przycisk
ze znakiem zapytarua.
WÄ…tki
Powered by wordpress | Theme: simpletex | © Jak ciÄ™ zĹ‚apiÄ…, to znaczy, ĹĽe oszukiwaĹ‚eĹ›. Jak nie, to znaczy, ĹĽe posĹ‚uĹĽyĹ‚eĹ› siÄ™ odpowiedniÄ… taktykÄ….