Win32 API 日本語リファレンス
ホームGraphics.Gdi › LOGFONTA

LOGFONTA

構造体
サイズx64: 60 バイト / x86: 60 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
lfHeightINT4+0+0

フォントの文字セルまたは文字の高さを、論理単位で指定します。文字の高さの値 (em の高さとも呼ばれます) は、文字セルの高さの値から内部レディングの値を引いたものです。フォントマッパーは lfHeight に指定された値を次のように解釈します。

説明
> 0 フォントマッパーはこの値をデバイス単位に変換し、利用可能なフォントのセルの高さと照合します。
0 フォントマッパーは、一致するフォントを検索する際に既定の高さの値を使用します。
< 0 フォントマッパーはこの値をデバイス単位に変換し、その絶対値を利用可能なフォントの文字の高さと照合します。

すべての高さの比較において、フォントマッパーは要求されたサイズを超えない範囲で最大のフォントを探します。

このマッピングは、フォントが最初に使用されるときに行われます。

MM_TEXT マッピングモードでは、指定したポイントサイズのフォントの高さを求めるために次の式を使用できます。

lfHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);

ここで MulDiv は次のように定義されます。

#define MulDiv(a,b,c)    (((a)*(b))/(c))
lfWidthINT4+4+4フォント内の文字の平均幅を、論理単位で指定します。lfWidth が 0 でない場合、デバイスのアスペクト比が利用可能なフォントのデジタル化アスペクト比と照合され、差の絶対値によって最も近いものが決定されます。
lfEscapementINT4+8+8

エスケープメントベクターとデバイスの x 軸との間の角度を、10 分の 1 度単位で指定します。エスケープメントベクターは、テキスト行のベースラインと平行です。

lfEscapement メンバーは、エスケープメントと向きの両方を指定します。lfEscapementlfOrientation には同じ値を設定してください。

lfOrientationINT4+12+12各文字のベースラインとデバイスの x 軸との間の角度を、10 分の 1 度単位で指定します。
lfWeightINT4+16+16

フォントの太さを 0 から 1000 の範囲で指定します。たとえば、400 は標準、700 は太字です。この値が 0 の場合は、既定の太さが使用されます。

便宜のため、Wingdi.h では次の値が定義されています。

太さ
FW_DONTCARE 0
FW_THIN 100
FW_EXTRALIGHT 200
FW_ULTRALIGHT 200
FW_LIGHT 300
FW_NORMAL 400
FW_REGULAR 400
FW_MEDIUM 500
FW_SEMIBOLD 600
FW_DEMIBOLD 600
FW_BOLD 700
FW_EXTRABOLD 800
FW_ULTRABOLD 800
FW_HEAVY 900
FW_BLACK 900
lfItalicBYTE1+20+20斜体フォントを指定する場合は TRUE にします。
lfUnderlineBYTE1+21+21下線付きフォントを指定する場合は TRUE にします。
lfStrikeOutBYTE1+22+22打ち消し線付きフォントを指定する場合は TRUE にします。
lfCharSetFONT_CHARSET1+23+23

文字セットを指定します。次の値があらかじめ定義されています。

説明
ANSI_CHARSET このフォントは Windows ANSI 文字セットをサポートします。
ARABIC_CHARSET このフォントはアラビア語文字セットをサポートします。
BALTIC_CHARSET このフォントはバルト言語文字セットをサポートします。
CHINESEBIG5_CHARSET このフォントは繁体字中国語 (Big 5) 文字セットをサポートします。
DEFAULT_CHARSET このフォントは、システム既定の Windows ANSI コードページに基づく文字セット値をサポートします。たとえば、システムロケールが英語 (米国) の場合は ANSI_CHARSET が設定されます。
EASTEUROPE_CHARSET このフォントは東ヨーロッパ言語文字セットをサポートします。
GB2312_CHARSET このフォントは簡体字中国語 (中国) 文字セットをサポートします。
GREEK_CHARSET このフォントはギリシャ語文字セットをサポートします。
HANGEUL_CHARSET このフォントは韓国語 (ハングル) 文字セットをサポートします。
HEBREW_CHARSET このフォントはヘブライ語文字セットをサポートします。
JOHAB_CHARSET このフォントは韓国語 (Johab) 文字セットをサポートします。
MAC_CHARSET このフォントは、現在のシステムの Macintosh コードページに基づく文字セット値をサポートします。この値は主にレガシーコードで使用されるものであり、最近の Macintosh コンピューターはエンコードに Unicode を使用するため、通常は必要ありません。
OEM_CHARSET このフォントは OEM 固有の文字セットをサポートします。OEM 文字セットはシステムに依存します。
RUSSIAN_CHARSET このフォントはキリル文字セットをサポートします。
SHIFTJIS_CHARSET このフォントは Shift-JIS (日本工業規格) 文字セットをサポートします。
SYMBOL_CHARSET このフォントは Windows シンボル文字セットをサポートします。
THAI_CHARSET このフォントはタイ語文字セットをサポートします。
TURKISH_CHARSET このフォントはトルコ語文字セットをサポートします。
VIETNAMESE_CHARSET このフォントはベトナム語文字セットをサポートします。

オペレーティングシステムには、これら以外の文字セットを持つフォントが存在する場合があります。アプリケーションが未知の文字セットのフォントを使用する場合、そのフォントで描画される文字列を変換したり解釈したりしようとしてはいけません。

このメンバーは、フォントのマッピング処理において重要です。一貫した結果を得るには、特定の文字セットを指定してください。lfFaceName メンバーに書体名を指定する場合は、lfCharSet の値が lfFaceName で指定した書体の文字セットと一致していることを確認してください。

lfOutPrecisionFONT_OUTPUT_PRECISION1+24+24

出力精度を指定します。出力精度は、要求されたフォントの高さ、幅、文字の向き、エスケープメント、ピッチ、およびフォントの種類に対して、出力がどれだけ厳密に一致しなければならないかを定義します。Wingdi.h で定義されている次の値のいずれかを指定できます。

説明
OUT_DEFAULT_PRECIS 既定のフォントマッパーの動作を指定します。
OUT_RASTER_PRECIS 同じ名前のフォントがシステムに複数存在する場合に、ラスターフォントを選択するようフォントマッパーに指示します。
OUT_STRING_PRECIS この値はフォントマッパーでは使用されませんが、ラスターフォントを列挙したときに返されます。
lfClipPrecisionFONT_CLIP_PRECISION1+25+25

クリッピング精度を指定します。クリッピング精度は、クリッピング領域から部分的にはみ出す文字をどのようにクリップするかを定義します。Wingdi.h で定義されている次の値の 1 つ以上を指定できます。

説明
CLIP_DEFAULT_PRECIS 既定のクリッピング動作を指定します。
CLIP_CHARACTER_PRECIS 使用されません。
CLIP_STROKE_PRECIS フォントマッパーでは使用されませんが、ラスターフォント、ベクターフォント、または TrueType フォントを列挙したときに返されます。
lfQualityFONT_QUALITY1+26+26

出力品質を指定します。出力品質は、論理フォントの属性を実際の物理フォントの属性に一致させるために、GDI がどれだけ慎重に処理しなければならないかを定義します。Wingdi.h で定義されている次の値のいずれかを指定できます。

説明
ANTIALIASED_QUALITY フォントのアンチエイリアシングを有効にします。この設定が機能するには、ディスプレイドライバーがアンチエイリアス処理されたテキストをサポートしている必要があります。
NONANTIALIASED_QUALITY レジストリサブキー HKEY_LOCAL_MACHINE\System\GDI\Fontsmoothing が存在する場合に、ドラフト品質の使用を強制します。
CLEARTYPE_COMPAT_QUALITY 互換性のある文字幅を使用して、フォントの ClearType テキストを有効にします。互換性のある文字幅では、ClearType でないテキストと同じ文字間隔のテキストが生成されます。
CLEARTYPE_QUALITY フォントの ClearType テキストを有効にします。この設定が機能するには、ディスプレイドライバーが ClearType テキストをサポートしている必要があります。
DEFAULT_QUALITY フォントの外観は問いません。
DRAFT_QUALITY GDI ラスターフォントの場合、スケーリングが有効になります。これにより利用できるフォントサイズは増えますが、品質は低下する可能性があります。太字、斜体、下線、打ち消し線のフォントは、必要に応じて合成されます。
lfPitchAndFamilyBYTE1+27+27

フォントのピッチとグループを指定します。下位 2 ビットはフォントのピッチを指定し、Wingdi.h で定義されている次の値のいずれかを指定できます。

このメンバーのビット 4 から 7 はフォントのグループを指定し、Wingdi.h で定義されている次の値のいずれかを指定できます。 適切な値は、1 つのピッチ定数と 1 つのファミリ定数をブール OR 演算子で結合することで得られます。

フォントファミリは、フォントの外観を大まかに表すものです。目的の書体が利用できない場合にフォントを指定するために用意されています。フォントファミリの値は次のとおりです。

説明
FF_DECORATIVE 装飾的なフォント。たとえば Old English。
FF_DONTCARE 指定しない、または不明。
FF_MODERN セリフの有無にかかわらず、ストローク幅が一定 (等幅) のフォント。等幅フォントは通常モダン系です。たとえば Pica、Elite、Courier New。
FF_ROMAN ストローク幅が可変 (プロポーショナル) で、セリフのあるフォント。たとえば Serif。
FF_SCRIPT 手書き風に見えるよう設計されたフォント。たとえば Script や Cursive。
FF_SWISS ストローク幅が可変 (プロポーショナル) で、セリフのないフォント。たとえば Sans Serif。
lfFaceNameCHAR32+28+28フォントの書体名を指定する、null で終わる文字列を指定します。この文字列の長さは、終端の null 文字を含めて 32 文字を超えてはなりません。EnumFontFamilies 関数を使用すると、現在利用可能なすべてのフォントの書体名を列挙できます。lfFaceName が空の文字列の場合、GDI は指定された他の属性に一致する最初のフォントを使用します。

公式ドキュメント

フォントの属性を定義します。

解説(Remarks)

次の状況では、ClearType のアンチエイリアシングはサポートされません。

この構造体は、IVisualProperties インターフェイスのメンバーで使いやすくするために、Windows Vista の Shtypes.idl および Shtypes.h で初めて登場しました。ただし、同一の構造体は、それ以前のバージョンの Windows でも Wingdi.h および Windows.h で定義されています。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// LOGFONTA  (x64 60 / x86 60 バイト)
typedef struct LOGFONTA {
    INT lfHeight;
    INT lfWidth;
    INT lfEscapement;
    INT lfOrientation;
    INT lfWeight;
    BYTE lfItalic;
    BYTE lfUnderline;
    BYTE lfStrikeOut;
    FONT_CHARSET lfCharSet;
    FONT_OUTPUT_PRECISION lfOutPrecision;
    FONT_CLIP_PRECISION lfClipPrecision;
    FONT_QUALITY lfQuality;
    BYTE lfPitchAndFamily;
    CHAR lfFaceName[32];
} LOGFONTA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct LOGFONTA
{
    public int lfHeight;
    public int lfWidth;
    public int lfEscapement;
    public int lfOrientation;
    public int lfWeight;
    public byte lfItalic;
    public byte lfUnderline;
    public byte lfStrikeOut;
    public byte lfCharSet;
    public byte lfOutPrecision;
    public byte lfClipPrecision;
    public byte lfQuality;
    public byte lfPitchAndFamily;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public sbyte[] lfFaceName;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure LOGFONTA
    Public lfHeight As Integer
    Public lfWidth As Integer
    Public lfEscapement As Integer
    Public lfOrientation As Integer
    Public lfWeight As Integer
    Public lfItalic As Byte
    Public lfUnderline As Byte
    Public lfStrikeOut As Byte
    Public lfCharSet As Byte
    Public lfOutPrecision As Byte
    Public lfClipPrecision As Byte
    Public lfQuality As Byte
    Public lfPitchAndFamily As Byte
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=32)> Public lfFaceName() As SByte
End Structure
import ctypes
from ctypes import wintypes

class LOGFONTA(ctypes.Structure):
    _fields_ = [
        ("lfHeight", ctypes.c_int),
        ("lfWidth", ctypes.c_int),
        ("lfEscapement", ctypes.c_int),
        ("lfOrientation", ctypes.c_int),
        ("lfWeight", ctypes.c_int),
        ("lfItalic", ctypes.c_ubyte),
        ("lfUnderline", ctypes.c_ubyte),
        ("lfStrikeOut", ctypes.c_ubyte),
        ("lfCharSet", ctypes.c_ubyte),
        ("lfOutPrecision", ctypes.c_ubyte),
        ("lfClipPrecision", ctypes.c_ubyte),
        ("lfQuality", ctypes.c_ubyte),
        ("lfPitchAndFamily", ctypes.c_ubyte),
        ("lfFaceName", ctypes.c_byte * 32),
    ]
#[repr(C)]
pub struct LOGFONTA {
    pub lfHeight: i32,
    pub lfWidth: i32,
    pub lfEscapement: i32,
    pub lfOrientation: i32,
    pub lfWeight: i32,
    pub lfItalic: u8,
    pub lfUnderline: u8,
    pub lfStrikeOut: u8,
    pub lfCharSet: u8,
    pub lfOutPrecision: u8,
    pub lfClipPrecision: u8,
    pub lfQuality: u8,
    pub lfPitchAndFamily: u8,
    pub lfFaceName: [i8; 32],
}
import "golang.org/x/sys/windows"

type LOGFONTA struct {
	lfHeight int32
	lfWidth int32
	lfEscapement int32
	lfOrientation int32
	lfWeight int32
	lfItalic byte
	lfUnderline byte
	lfStrikeOut byte
	lfCharSet byte
	lfOutPrecision byte
	lfClipPrecision byte
	lfQuality byte
	lfPitchAndFamily byte
	lfFaceName [32]int8
}
type
  LOGFONTA = record
    lfHeight: Integer;
    lfWidth: Integer;
    lfEscapement: Integer;
    lfOrientation: Integer;
    lfWeight: Integer;
    lfItalic: Byte;
    lfUnderline: Byte;
    lfStrikeOut: Byte;
    lfCharSet: Byte;
    lfOutPrecision: Byte;
    lfClipPrecision: Byte;
    lfQuality: Byte;
    lfPitchAndFamily: Byte;
    lfFaceName: array[0..31] of Shortint;
  end;
const LOGFONTA = extern struct {
    lfHeight: i32,
    lfWidth: i32,
    lfEscapement: i32,
    lfOrientation: i32,
    lfWeight: i32,
    lfItalic: u8,
    lfUnderline: u8,
    lfStrikeOut: u8,
    lfCharSet: u8,
    lfOutPrecision: u8,
    lfClipPrecision: u8,
    lfQuality: u8,
    lfPitchAndFamily: u8,
    lfFaceName: [32]i8,
};
type
  LOGFONTA {.bycopy.} = object
    lfHeight: int32
    lfWidth: int32
    lfEscapement: int32
    lfOrientation: int32
    lfWeight: int32
    lfItalic: uint8
    lfUnderline: uint8
    lfStrikeOut: uint8
    lfCharSet: uint8
    lfOutPrecision: uint8
    lfClipPrecision: uint8
    lfQuality: uint8
    lfPitchAndFamily: uint8
    lfFaceName: array[32, int8]
struct LOGFONTA
{
    int lfHeight;
    int lfWidth;
    int lfEscapement;
    int lfOrientation;
    int lfWeight;
    ubyte lfItalic;
    ubyte lfUnderline;
    ubyte lfStrikeOut;
    ubyte lfCharSet;
    ubyte lfOutPrecision;
    ubyte lfClipPrecision;
    ubyte lfQuality;
    ubyte lfPitchAndFamily;
    byte[32] lfFaceName;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; LOGFONTA サイズ: 60 バイト(x64)
dim st, 15    ; 4byte整数×15(構造体サイズ 60 / 4 切り上げ)
; lfHeight : INT (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; lfWidth : INT (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; lfEscapement : INT (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; lfOrientation : INT (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; lfWeight : INT (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; lfItalic : BYTE (+20, 1byte)  poke st,20,値  /  値 = peek(st,20)
; lfUnderline : BYTE (+21, 1byte)  poke st,21,値  /  値 = peek(st,21)
; lfStrikeOut : BYTE (+22, 1byte)  poke st,22,値  /  値 = peek(st,22)
; lfCharSet : FONT_CHARSET (+23, 1byte)  poke st,23,値  /  値 = peek(st,23)
; lfOutPrecision : FONT_OUTPUT_PRECISION (+24, 1byte)  poke st,24,値  /  値 = peek(st,24)
; lfClipPrecision : FONT_CLIP_PRECISION (+25, 1byte)  poke st,25,値  /  値 = peek(st,25)
; lfQuality : FONT_QUALITY (+26, 1byte)  poke st,26,値  /  値 = peek(st,26)
; lfPitchAndFamily : BYTE (+27, 1byte)  poke st,27,値  /  値 = peek(st,27)
; lfFaceName : CHAR (+28, 32byte)  varptr(st)+28 を基点に操作(32byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global LOGFONTA
    #field int lfHeight
    #field int lfWidth
    #field int lfEscapement
    #field int lfOrientation
    #field int lfWeight
    #field byte lfItalic
    #field byte lfUnderline
    #field byte lfStrikeOut
    #field byte lfCharSet
    #field byte lfOutPrecision
    #field byte lfClipPrecision
    #field byte lfQuality
    #field byte lfPitchAndFamily
    #field byte lfFaceName 32
#endstruct

stdim st, LOGFONTA        ; NSTRUCT 変数を確保
st->lfHeight = 100
mes "lfHeight=" + st->lfHeight