LOGFONTA
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| lfHeight | INT | 4 | +0 | +0 | フォントの文字セルまたは文字の高さを、論理単位で指定します。文字の高さの値 (em の高さとも呼ばれます) は、文字セルの高さの値から内部レディングの値を引いたものです。フォントマッパーは lfHeight に指定された値を次のように解釈します。
すべての高さの比較において、フォントマッパーは要求されたサイズを超えない範囲で最大のフォントを探します。 このマッピングは、フォントが最初に使用されるときに行われます。 MM_TEXT マッピングモードでは、指定したポイントサイズのフォントの高さを求めるために次の式を使用できます。
ここで MulDiv は次のように定義されます。 | ||||||||||||||||||||||||||||||||||||||||
| lfWidth | INT | 4 | +4 | +4 | フォント内の文字の平均幅を、論理単位で指定します。lfWidth が 0 でない場合、デバイスのアスペクト比が利用可能なフォントのデジタル化アスペクト比と照合され、差の絶対値によって最も近いものが決定されます。 | ||||||||||||||||||||||||||||||||||||||||
| lfEscapement | INT | 4 | +8 | +8 | エスケープメントベクターとデバイスの x 軸との間の角度を、10 分の 1 度単位で指定します。エスケープメントベクターは、テキスト行のベースラインと平行です。 lfEscapement メンバーは、エスケープメントと向きの両方を指定します。lfEscapement と lfOrientation には同じ値を設定してください。 | ||||||||||||||||||||||||||||||||||||||||
| lfOrientation | INT | 4 | +12 | +12 | 各文字のベースラインとデバイスの x 軸との間の角度を、10 分の 1 度単位で指定します。 | ||||||||||||||||||||||||||||||||||||||||
| lfWeight | INT | 4 | +16 | +16 | フォントの太さを 0 から 1000 の範囲で指定します。たとえば、400 は標準、700 は太字です。この値が 0 の場合は、既定の太さが使用されます。 便宜のため、Wingdi.h では次の値が定義されています。
| ||||||||||||||||||||||||||||||||||||||||
| lfItalic | BYTE | 1 | +20 | +20 | 斜体フォントを指定する場合は TRUE にします。 | ||||||||||||||||||||||||||||||||||||||||
| lfUnderline | BYTE | 1 | +21 | +21 | 下線付きフォントを指定する場合は TRUE にします。 | ||||||||||||||||||||||||||||||||||||||||
| lfStrikeOut | BYTE | 1 | +22 | +22 | 打ち消し線付きフォントを指定する場合は TRUE にします。 | ||||||||||||||||||||||||||||||||||||||||
| lfCharSet | FONT_CHARSET | 1 | +23 | +23 | 文字セットを指定します。次の値があらかじめ定義されています。
オペレーティングシステムには、これら以外の文字セットを持つフォントが存在する場合があります。アプリケーションが未知の文字セットのフォントを使用する場合、そのフォントで描画される文字列を変換したり解釈したりしようとしてはいけません。 このメンバーは、フォントのマッピング処理において重要です。一貫した結果を得るには、特定の文字セットを指定してください。lfFaceName メンバーに書体名を指定する場合は、lfCharSet の値が lfFaceName で指定した書体の文字セットと一致していることを確認してください。 | ||||||||||||||||||||||||||||||||||||||||
| lfOutPrecision | FONT_OUTPUT_PRECISION | 1 | +24 | +24 | 出力精度を指定します。出力精度は、要求されたフォントの高さ、幅、文字の向き、エスケープメント、ピッチ、およびフォントの種類に対して、出力がどれだけ厳密に一致しなければならないかを定義します。Wingdi.h で定義されている次の値のいずれかを指定できます。
| ||||||||||||||||||||||||||||||||||||||||
| lfClipPrecision | FONT_CLIP_PRECISION | 1 | +25 | +25 | クリッピング精度を指定します。クリッピング精度は、クリッピング領域から部分的にはみ出す文字をどのようにクリップするかを定義します。Wingdi.h で定義されている次の値の 1 つ以上を指定できます。
| ||||||||||||||||||||||||||||||||||||||||
| lfQuality | FONT_QUALITY | 1 | +26 | +26 | 出力品質を指定します。出力品質は、論理フォントの属性を実際の物理フォントの属性に一致させるために、GDI がどれだけ慎重に処理しなければならないかを定義します。Wingdi.h で定義されている次の値のいずれかを指定できます。
| ||||||||||||||||||||||||||||||||||||||||
| lfPitchAndFamily | BYTE | 1 | +27 | +27 | フォントのピッチとグループを指定します。下位 2 ビットはフォントのピッチを指定し、Wingdi.h で定義されている次の値のいずれかを指定できます。 このメンバーのビット 4 から 7 はフォントのグループを指定し、Wingdi.h で定義されている次の値のいずれかを指定できます。 適切な値は、1 つのピッチ定数と 1 つのファミリ定数をブール OR 演算子で結合することで得られます。フォントファミリは、フォントの外観を大まかに表すものです。目的の書体が利用できない場合にフォントを指定するために用意されています。フォントファミリの値は次のとおりです。
| ||||||||||||||||||||||||||||||||||||||||
| lfFaceName | CHAR | 32 | +28 | +28 | フォントの書体名を指定する、null で終わる文字列を指定します。この文字列の長さは、終端の null 文字を含めて 32 文字を超えてはなりません。EnumFontFamilies 関数を使用すると、現在利用可能なすべてのフォントの書体名を列挙できます。lfFaceName が空の文字列の場合、GDI は指定された他の属性に一致する最初のフォントを使用します。 |
公式ドキュメント
フォントの属性を定義します。
解説(Remarks)
次の状況では、ClearType のアンチエイリアシングはサポートされません。
- テキストがプリンターに描画される場合。
- ディスプレイが 256 色以下に設定されている場合。
- テキストがターミナルサーバークライアントに描画される場合。
- フォントが TrueType フォントでも、TrueType アウトラインを持つ Microsoft OpenType フォントでもない場合。たとえば、次のものは ClearType のアンチエイリアシングをサポートしません。Type 1 フォント、TrueType アウトラインを持たない PostScript OpenType フォント、ビットマップフォント、ベクターフォント、デバイスフォント。
- フォントが調整済みの埋め込みビットマップを持つ場合。ただし、その埋め込みビットマップを含むフォントサイズに限られます。たとえば、これは東アジアのフォントでよく見られます。
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 Structureimport 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