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
|