Delen via


Lettertype maken en selecteren

Het dialoogvenster Lettertype algemene dialoogvenster vereenvoudigt het maken en selecteren van lettertypen. Door de CHOOSEFONT- structuur te initialiseren en de functie CHOOSEFONT aan te roepen, kan een toepassing dezelfde interface voor lettertypeselectie ondersteunen die eerder veel regels aangepaste code vereist. (Zie Algemene dialoogvensterbibliotheek voorvoor meer informatie over het algemene dialoogvenster Lettertype.)

Selectie door de gebruiker

De meeste bewerkingen voor het maken en selecteren van lettertypen hebben betrekking op de gebruiker. Met tekstverwerkingstoepassingen kan de gebruiker bijvoorbeeld unieke lettertypen selecteren voor koppen, voetnoten en hoofdtekst. Nadat de gebruiker een lettertype heeft geselecteerd met behulp van het dialoogvenster Lettertype en op de knop OK drukt, initialiseert de functie CHOOSEFONT de leden van een LOGFONT- structuur met de kenmerken van het aangevraagde lettertype. Als u dit lettertype wilt gebruiken voor tekstuitvoerbewerkingen, moet een toepassing eerst een logisch lettertype maken en dat lettertype vervolgens selecteren in de apparaatcontext. Een logisch lettertype is een door de toepassing geleverde beschrijving van een ideaal lettertype. Een ontwikkelaar kan een logisch lettertype maken door de functies CreateFont of de CreateFontIndirect-functies aan te roepen. In dit geval roept de toepassing CreateFontIndirect- aan en geeft deze een aanwijzer op naar de LOGFONT- structuur geïnitialiseerd door CHOOSEFONT-. Over het algemeen is het efficiënter om CreateFontIndirect- aan te roepen, omdat CreateFont- verschillende parameters vereist, terwijl CreateFontIndirect- slechts één aanwijzer nodig heeft om LOGFONT-te.

Voordat een toepassing daadwerkelijk kan beginnen met het tekenen van tekst met een logisch lettertype, moet deze de dichtstbijzijnde overeenkomst vinden met de lettertypen die intern op het apparaat zijn opgeslagen en de lettertypen waarvan de resources in het besturingssysteem zijn geladen. De lettertypen die zijn opgeslagen op het apparaat of in het besturingssysteem, worden fysieke lettertypengenoemd. Het proces voor het vinden van het fysieke lettertype dat het meest overeenkomt met een opgegeven logisch lettertype, wordt lettertypetoewijzing genoemd. Dit proces treedt op wanneer een toepassing de SelectObject functie aanroept en een ingang levert waarmee een logisch lettertype wordt geïdentificeerd. Lettertypetoewijzing wordt uitgevoerd met behulp van een intern algoritme waarmee de kenmerken van het aangevraagde logische lettertype worden vergeleken met de kenmerken van beschikbare fysieke lettertypen. Wanneer het algoritme font mapper de zoekopdracht voltooit en de dichtstbijzijnde overeenkomst bepaalt, retourneert de functie SelectObject en kan de toepassing beginnen met het tekenen van tekst met het nieuwe lettertype.

De SetMapperFlags functie geeft aan of het lettertypetoewijzingsalgoritmen alleen zoekt naar fysieke lettertypen met hoogte-breedteverhoudingen die overeenkomen met het fysieke apparaat. De hoogte-breedteverhouding voor een apparaat is de verhouding die wordt gevormd door de breedte en de hoogte van een pixel op dat apparaat.

Het systeemlettertype (ook wel de shell of het standaardlettertype genoemd) is het lettertype dat wordt gebruikt voor tekst in de titelbalken, menu's en dialoogvensters.

Speciale overwegingen voor lettertypeselectie

Hoewel de meeste tekenselectiebewerkingen betrekking hebben op de gebruiker, zijn er enkele gevallen waarin dit niet waar is. Een ontwikkelaar kan bijvoorbeeld een uniek lettertype in een toepassing gebruiken om tekst te tekenen in een besturingselementvenster. Als u een geschikt lettertype wilt selecteren, moet de toepassing kunnen bepalen welke lettertypen beschikbaar zijn, een logisch lettertype maken dat een van deze beschikbare lettertypen beschrijft en dat lettertype vervolgens selecteren in de juiste apparaatcontext.

Een toepassing kan de beschikbare lettertypen opsommen met behulp van de functies EnumFonts of EnumFontFamilies. EnumFontFamilies wordt aanbevolen omdat hiermee alle stijlen worden opgesomd die aan een familienaam zijn gekoppeld. Dit kan handig zijn voor lettertypen met veel of ongebruikelijke stijlen en voor lettertypen die internationale grenzen overschrijden.

Zodra een toepassing de beschikbare lettertypen heeft geïnventariseerd en een geschikte overeenkomst heeft gevonden, moet deze de waarden gebruiken die worden geretourneerd door de functie lettertype-opsomming om de leden van een LOGFONT- structuur te initialiseren. Vervolgens kan de functie CreateFontIndirect aanroepen, waarbij deze een aanwijzer doorgeeft aan de geïnitialiseerde LOGFONT- structuur. Als de functie CreateFontIndirect is geslaagd, kan de toepassing vervolgens het logische lettertype selecteren door de functie SelectObject aan te roepen. Wanneer u de leden van de LOGFONT- structuur initialiseert, moet u een specifieke tekenset opgeven in de lfCharSet- lid. Dit lid is belangrijk in het proces voor het toewijzen van lettertypen en de resultaten zijn inconsistent als dit lid niet correct is geïnitialiseerd. Als u een typefacenaam opgeeft in de lfFaceName lid van de structuur LOGFONT, moet u ervoor zorgen dat de lfCharSet waarde overeenkomt met de tekenset van het lettertype dat is opgegeven in lfFaceName. Als u bijvoorbeeld een lettertype zoals MS Mincho wilt selecteren, moet lfCharSet- worden ingesteld op de vooraf gedefinieerde waarde SHIFTJIS_CHARSET.

De lettertypen voor veel Oost-Aziatische talen hebben twee namen van lettertypen: een Engelse naam en een gelokaliseerde naam. CreateFont, CreateFontIndirecten CreateFontIndirectEx de gelokaliseerde typefacenaam voor een systeeminstelling die overeenkomt met de taal, maar ze nemen de Engelse naam voor alle andere landinstellingen van het systeem. De beste methode is om één naam uit te proberen en bij fouten de andere te proberen. Houd er rekening mee dat EnumFonts, EnumFontFamiliesen EnumFontFamiliesEx de engelse naam van het lettertype retourneren als de landinstelling van het systeem niet overeenkomt met de taal van het lettertype. Vanaf Windows 2000 is dit geen probleem meer omdat het lettertypetoewijzingper voor CreateFont, CreateFontIndirecten CreateFontIndirectEx de naam van het lettertype herkent, ongeacht de landinstelling.