LOGFONTW
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| lfHeight | INT | 4 | +0 | +0 | フォントの文字セルまたは文字の高さを、論理単位で指定します。文字の高さ (em 高さとも呼ばれます) は、文字セルの高さから内部レディング (internal leading) の値を引いた値です。フォントマッパーは、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 | WCHAR | 64 | +28 | +28 | フォントのタイプフェイス名を表す、null で終わる文字列を指定します。この文字列の長さは、終端の null 文字を含めて 32 文字を超えてはなりません。現在利用可能なすべてのフォントのタイプフェイス名を列挙するには、EnumFontFamilies 関数を使用できます。lfFaceName が空の文字列の場合、GDI は指定された他の属性に一致する最初のフォントを使用します。 |
公式ドキュメント
フォントの属性を定義します。
解説(Remarks)
次の状況では ClearType のアンチエイリアシングはサポートされません。
- テキストがプリンターに出力される場合。
- ディスプレイが 256 色以下に設定されている場合。
- テキストがターミナルサーバークライアントに描画される場合。
- フォントが TrueType フォント、または TrueType アウトラインを持つ Microsoft OpenType フォントではない場合。たとえば、Type 1 フォント、TrueType アウトラインを持たない Postscript OpenType フォント、ビットマップフォント、ベクターフォント、デバイスフォントは ClearType のアンチエイリアシングをサポートしません。
- フォントが調整済みの埋め込みビットマップを持つ場合 (その埋め込みビットマップが含まれるフォントサイズについて)。これはたとえば、東アジア言語のフォントでよく見られます。
shtypes.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI 版と Unicode 版を自動的に選択するエイリアスとして LOGFONT を定義しています。エンコーディング中立のエイリアスと、エンコーディング中立でないコードを混在させると不一致が生じ、コンパイルエラーや実行時エラーの原因となることがあります。詳細については、関数プロトタイプの規則を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// LOGFONTW (x64 92 / x86 92 バイト)
typedef struct LOGFONTW {
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;
WCHAR lfFaceName[32];
} LOGFONTW;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct LOGFONTW
{
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.ByValTStr, SizeConst = 32)] public string lfFaceName;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure LOGFONTW
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.ByValTStr, SizeConst:=32)> Public lfFaceName As String
End Structureimport ctypes
from ctypes import wintypes
class LOGFONTW(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_wchar * 32),
]#[repr(C)]
pub struct LOGFONTW {
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: [u16; 32],
}import "golang.org/x/sys/windows"
type LOGFONTW 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]uint16
}type
LOGFONTW = 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 WideChar;
end;const LOGFONTW = 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]u16,
};type
LOGFONTW {.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, uint16]struct LOGFONTW
{
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;
wchar[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 レイアウト)
; LOGFONTW サイズ: 92 バイト(x64)
dim st, 23 ; 4byte整数×23(構造体サイズ 92 / 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 : WCHAR (+28, 64byte) varptr(st)+28 を基点に操作(64byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global LOGFONTW
#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 wchar lfFaceName 32
#endstruct
stdim st, LOGFONTW ; NSTRUCT 変数を確保
st->lfHeight = 100
mes "lfHeight=" + st->lfHeight