Win32 API 日本語リファレンス
ホームGlobalization › ENUMTEXTMETRICA

ENUMTEXTMETRICA

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

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

フィールド

フィールドサイズx64x86説明
etmNewTextMetricExNEWTEXTMETRICEXA96+0+0列挙されたフォントの拡張テキストメトリック情報(ANSI)。
etmAxesListAXESLISTA392+96+96マルチプルマスターフォントの可変軸一覧を保持するAXESLISTA構造体。

各言語での定義

#include <windows.h>

// NEWTEXTMETRICA  (x64 72 / x86 72 バイト)
typedef struct NEWTEXTMETRICA {
    INT tmHeight;
    INT tmAscent;
    INT tmDescent;
    INT tmInternalLeading;
    INT tmExternalLeading;
    INT tmAveCharWidth;
    INT tmMaxCharWidth;
    INT tmWeight;
    INT tmOverhang;
    INT tmDigitizedAspectX;
    INT tmDigitizedAspectY;
    BYTE tmFirstChar;
    BYTE tmLastChar;
    BYTE tmDefaultChar;
    BYTE tmBreakChar;
    BYTE tmItalic;
    BYTE tmUnderlined;
    BYTE tmStruckOut;
    TMPF_FLAGS tmPitchAndFamily;
    BYTE tmCharSet;
    DWORD ntmFlags;
    DWORD ntmSizeEM;
    DWORD ntmCellHeight;
    DWORD ntmAvgWidth;
} NEWTEXTMETRICA;

// FONTSIGNATURE  (x64 24 / x86 24 バイト)
typedef struct FONTSIGNATURE {
    DWORD fsUsb[4];
    DWORD fsCsb[2];
} FONTSIGNATURE;

// NEWTEXTMETRICEXA  (x64 96 / x86 96 バイト)
typedef struct NEWTEXTMETRICEXA {
    NEWTEXTMETRICA ntmTm;
    FONTSIGNATURE ntmFontSig;
} NEWTEXTMETRICEXA;

// AXISINFOA  (x64 24 / x86 24 バイト)
typedef struct AXISINFOA {
    INT axMinValue;
    INT axMaxValue;
    BYTE axAxisName[16];
} AXISINFOA;

// AXESLISTA  (x64 392 / x86 392 バイト)
typedef struct AXESLISTA {
    DWORD axlReserved;
    DWORD axlNumAxes;
    AXISINFOA axlAxisInfo[16];
} AXESLISTA;

// ENUMTEXTMETRICA  (x64 488 / x86 488 バイト)
typedef struct ENUMTEXTMETRICA {
    NEWTEXTMETRICEXA etmNewTextMetricEx;
    AXESLISTA etmAxesList;
} ENUMTEXTMETRICA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NEWTEXTMETRICA
{
    public int tmHeight;
    public int tmAscent;
    public int tmDescent;
    public int tmInternalLeading;
    public int tmExternalLeading;
    public int tmAveCharWidth;
    public int tmMaxCharWidth;
    public int tmWeight;
    public int tmOverhang;
    public int tmDigitizedAspectX;
    public int tmDigitizedAspectY;
    public byte tmFirstChar;
    public byte tmLastChar;
    public byte tmDefaultChar;
    public byte tmBreakChar;
    public byte tmItalic;
    public byte tmUnderlined;
    public byte tmStruckOut;
    public byte tmPitchAndFamily;
    public byte tmCharSet;
    public uint ntmFlags;
    public uint ntmSizeEM;
    public uint ntmCellHeight;
    public uint ntmAvgWidth;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FONTSIGNATURE
{
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public uint[] fsUsb;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public uint[] fsCsb;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NEWTEXTMETRICEXA
{
    public NEWTEXTMETRICA ntmTm;
    public FONTSIGNATURE ntmFontSig;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct AXISINFOA
{
    public int axMinValue;
    public int axMaxValue;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] axAxisName;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct AXESLISTA
{
    public uint axlReserved;
    public uint axlNumAxes;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public AXISINFOA[] axlAxisInfo;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct ENUMTEXTMETRICA
{
    public NEWTEXTMETRICEXA etmNewTextMetricEx;
    public AXESLISTA etmAxesList;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NEWTEXTMETRICA
    Public tmHeight As Integer
    Public tmAscent As Integer
    Public tmDescent As Integer
    Public tmInternalLeading As Integer
    Public tmExternalLeading As Integer
    Public tmAveCharWidth As Integer
    Public tmMaxCharWidth As Integer
    Public tmWeight As Integer
    Public tmOverhang As Integer
    Public tmDigitizedAspectX As Integer
    Public tmDigitizedAspectY As Integer
    Public tmFirstChar As Byte
    Public tmLastChar As Byte
    Public tmDefaultChar As Byte
    Public tmBreakChar As Byte
    Public tmItalic As Byte
    Public tmUnderlined As Byte
    Public tmStruckOut As Byte
    Public tmPitchAndFamily As Byte
    Public tmCharSet As Byte
    Public ntmFlags As UInteger
    Public ntmSizeEM As UInteger
    Public ntmCellHeight As UInteger
    Public ntmAvgWidth As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FONTSIGNATURE
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Public fsUsb() As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public fsCsb() As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NEWTEXTMETRICEXA
    Public ntmTm As NEWTEXTMETRICA
    Public ntmFontSig As FONTSIGNATURE
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure AXISINFOA
    Public axMinValue As Integer
    Public axMaxValue As Integer
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public axAxisName() As Byte
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure AXESLISTA
    Public axlReserved As UInteger
    Public axlNumAxes As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public axlAxisInfo() As AXISINFOA
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure ENUMTEXTMETRICA
    Public etmNewTextMetricEx As NEWTEXTMETRICEXA
    Public etmAxesList As AXESLISTA
End Structure
import ctypes
from ctypes import wintypes

class NEWTEXTMETRICA(ctypes.Structure):
    _fields_ = [
        ("tmHeight", ctypes.c_int),
        ("tmAscent", ctypes.c_int),
        ("tmDescent", ctypes.c_int),
        ("tmInternalLeading", ctypes.c_int),
        ("tmExternalLeading", ctypes.c_int),
        ("tmAveCharWidth", ctypes.c_int),
        ("tmMaxCharWidth", ctypes.c_int),
        ("tmWeight", ctypes.c_int),
        ("tmOverhang", ctypes.c_int),
        ("tmDigitizedAspectX", ctypes.c_int),
        ("tmDigitizedAspectY", ctypes.c_int),
        ("tmFirstChar", ctypes.c_ubyte),
        ("tmLastChar", ctypes.c_ubyte),
        ("tmDefaultChar", ctypes.c_ubyte),
        ("tmBreakChar", ctypes.c_ubyte),
        ("tmItalic", ctypes.c_ubyte),
        ("tmUnderlined", ctypes.c_ubyte),
        ("tmStruckOut", ctypes.c_ubyte),
        ("tmPitchAndFamily", ctypes.c_ubyte),
        ("tmCharSet", ctypes.c_ubyte),
        ("ntmFlags", wintypes.DWORD),
        ("ntmSizeEM", wintypes.DWORD),
        ("ntmCellHeight", wintypes.DWORD),
        ("ntmAvgWidth", wintypes.DWORD),
    ]

class FONTSIGNATURE(ctypes.Structure):
    _fields_ = [
        ("fsUsb", wintypes.DWORD * 4),
        ("fsCsb", wintypes.DWORD * 2),
    ]

class NEWTEXTMETRICEXA(ctypes.Structure):
    _fields_ = [
        ("ntmTm", NEWTEXTMETRICA),
        ("ntmFontSig", FONTSIGNATURE),
    ]

class AXISINFOA(ctypes.Structure):
    _fields_ = [
        ("axMinValue", ctypes.c_int),
        ("axMaxValue", ctypes.c_int),
        ("axAxisName", ctypes.c_ubyte * 16),
    ]

class AXESLISTA(ctypes.Structure):
    _fields_ = [
        ("axlReserved", wintypes.DWORD),
        ("axlNumAxes", wintypes.DWORD),
        ("axlAxisInfo", AXISINFOA * 16),
    ]

class ENUMTEXTMETRICA(ctypes.Structure):
    _fields_ = [
        ("etmNewTextMetricEx", NEWTEXTMETRICEXA),
        ("etmAxesList", AXESLISTA),
    ]
#[repr(C)]
pub struct NEWTEXTMETRICA {
    pub tmHeight: i32,
    pub tmAscent: i32,
    pub tmDescent: i32,
    pub tmInternalLeading: i32,
    pub tmExternalLeading: i32,
    pub tmAveCharWidth: i32,
    pub tmMaxCharWidth: i32,
    pub tmWeight: i32,
    pub tmOverhang: i32,
    pub tmDigitizedAspectX: i32,
    pub tmDigitizedAspectY: i32,
    pub tmFirstChar: u8,
    pub tmLastChar: u8,
    pub tmDefaultChar: u8,
    pub tmBreakChar: u8,
    pub tmItalic: u8,
    pub tmUnderlined: u8,
    pub tmStruckOut: u8,
    pub tmPitchAndFamily: u8,
    pub tmCharSet: u8,
    pub ntmFlags: u32,
    pub ntmSizeEM: u32,
    pub ntmCellHeight: u32,
    pub ntmAvgWidth: u32,
}

#[repr(C)]
pub struct FONTSIGNATURE {
    pub fsUsb: [u32; 4],
    pub fsCsb: [u32; 2],
}

#[repr(C)]
pub struct NEWTEXTMETRICEXA {
    pub ntmTm: NEWTEXTMETRICA,
    pub ntmFontSig: FONTSIGNATURE,
}

#[repr(C)]
pub struct AXISINFOA {
    pub axMinValue: i32,
    pub axMaxValue: i32,
    pub axAxisName: [u8; 16],
}

#[repr(C)]
pub struct AXESLISTA {
    pub axlReserved: u32,
    pub axlNumAxes: u32,
    pub axlAxisInfo: [AXISINFOA; 16],
}

#[repr(C)]
pub struct ENUMTEXTMETRICA {
    pub etmNewTextMetricEx: NEWTEXTMETRICEXA,
    pub etmAxesList: AXESLISTA,
}
import "golang.org/x/sys/windows"

type NEWTEXTMETRICA struct {
	tmHeight int32
	tmAscent int32
	tmDescent int32
	tmInternalLeading int32
	tmExternalLeading int32
	tmAveCharWidth int32
	tmMaxCharWidth int32
	tmWeight int32
	tmOverhang int32
	tmDigitizedAspectX int32
	tmDigitizedAspectY int32
	tmFirstChar byte
	tmLastChar byte
	tmDefaultChar byte
	tmBreakChar byte
	tmItalic byte
	tmUnderlined byte
	tmStruckOut byte
	tmPitchAndFamily byte
	tmCharSet byte
	ntmFlags uint32
	ntmSizeEM uint32
	ntmCellHeight uint32
	ntmAvgWidth uint32
}

type FONTSIGNATURE struct {
	fsUsb [4]uint32
	fsCsb [2]uint32
}

type NEWTEXTMETRICEXA struct {
	ntmTm NEWTEXTMETRICA
	ntmFontSig FONTSIGNATURE
}

type AXISINFOA struct {
	axMinValue int32
	axMaxValue int32
	axAxisName [16]byte
}

type AXESLISTA struct {
	axlReserved uint32
	axlNumAxes uint32
	axlAxisInfo [16]AXISINFOA
}

type ENUMTEXTMETRICA struct {
	etmNewTextMetricEx NEWTEXTMETRICEXA
	etmAxesList AXESLISTA
}
type
  NEWTEXTMETRICA = record
    tmHeight: Integer;
    tmAscent: Integer;
    tmDescent: Integer;
    tmInternalLeading: Integer;
    tmExternalLeading: Integer;
    tmAveCharWidth: Integer;
    tmMaxCharWidth: Integer;
    tmWeight: Integer;
    tmOverhang: Integer;
    tmDigitizedAspectX: Integer;
    tmDigitizedAspectY: Integer;
    tmFirstChar: Byte;
    tmLastChar: Byte;
    tmDefaultChar: Byte;
    tmBreakChar: Byte;
    tmItalic: Byte;
    tmUnderlined: Byte;
    tmStruckOut: Byte;
    tmPitchAndFamily: Byte;
    tmCharSet: Byte;
    ntmFlags: DWORD;
    ntmSizeEM: DWORD;
    ntmCellHeight: DWORD;
    ntmAvgWidth: DWORD;
  end;

  FONTSIGNATURE = record
    fsUsb: array[0..3] of DWORD;
    fsCsb: array[0..1] of DWORD;
  end;

  NEWTEXTMETRICEXA = record
    ntmTm: NEWTEXTMETRICA;
    ntmFontSig: FONTSIGNATURE;
  end;

  AXISINFOA = record
    axMinValue: Integer;
    axMaxValue: Integer;
    axAxisName: array[0..15] of Byte;
  end;

  AXESLISTA = record
    axlReserved: DWORD;
    axlNumAxes: DWORD;
    axlAxisInfo: array[0..15] of AXISINFOA;
  end;

  ENUMTEXTMETRICA = record
    etmNewTextMetricEx: NEWTEXTMETRICEXA;
    etmAxesList: AXESLISTA;
  end;
const NEWTEXTMETRICA = extern struct {
    tmHeight: i32,
    tmAscent: i32,
    tmDescent: i32,
    tmInternalLeading: i32,
    tmExternalLeading: i32,
    tmAveCharWidth: i32,
    tmMaxCharWidth: i32,
    tmWeight: i32,
    tmOverhang: i32,
    tmDigitizedAspectX: i32,
    tmDigitizedAspectY: i32,
    tmFirstChar: u8,
    tmLastChar: u8,
    tmDefaultChar: u8,
    tmBreakChar: u8,
    tmItalic: u8,
    tmUnderlined: u8,
    tmStruckOut: u8,
    tmPitchAndFamily: u8,
    tmCharSet: u8,
    ntmFlags: u32,
    ntmSizeEM: u32,
    ntmCellHeight: u32,
    ntmAvgWidth: u32,
};

const FONTSIGNATURE = extern struct {
    fsUsb: [4]u32,
    fsCsb: [2]u32,
};

const NEWTEXTMETRICEXA = extern struct {
    ntmTm: NEWTEXTMETRICA,
    ntmFontSig: FONTSIGNATURE,
};

const AXISINFOA = extern struct {
    axMinValue: i32,
    axMaxValue: i32,
    axAxisName: [16]u8,
};

const AXESLISTA = extern struct {
    axlReserved: u32,
    axlNumAxes: u32,
    axlAxisInfo: [16]AXISINFOA,
};

const ENUMTEXTMETRICA = extern struct {
    etmNewTextMetricEx: NEWTEXTMETRICEXA,
    etmAxesList: AXESLISTA,
};
type
  NEWTEXTMETRICA {.bycopy.} = object
    tmHeight: int32
    tmAscent: int32
    tmDescent: int32
    tmInternalLeading: int32
    tmExternalLeading: int32
    tmAveCharWidth: int32
    tmMaxCharWidth: int32
    tmWeight: int32
    tmOverhang: int32
    tmDigitizedAspectX: int32
    tmDigitizedAspectY: int32
    tmFirstChar: uint8
    tmLastChar: uint8
    tmDefaultChar: uint8
    tmBreakChar: uint8
    tmItalic: uint8
    tmUnderlined: uint8
    tmStruckOut: uint8
    tmPitchAndFamily: uint8
    tmCharSet: uint8
    ntmFlags: uint32
    ntmSizeEM: uint32
    ntmCellHeight: uint32
    ntmAvgWidth: uint32

  FONTSIGNATURE {.bycopy.} = object
    fsUsb: array[4, uint32]
    fsCsb: array[2, uint32]

  NEWTEXTMETRICEXA {.bycopy.} = object
    ntmTm: NEWTEXTMETRICA
    ntmFontSig: FONTSIGNATURE

  AXISINFOA {.bycopy.} = object
    axMinValue: int32
    axMaxValue: int32
    axAxisName: array[16, uint8]

  AXESLISTA {.bycopy.} = object
    axlReserved: uint32
    axlNumAxes: uint32
    axlAxisInfo: array[16, AXISINFOA]

  ENUMTEXTMETRICA {.bycopy.} = object
    etmNewTextMetricEx: NEWTEXTMETRICEXA
    etmAxesList: AXESLISTA
struct NEWTEXTMETRICA
{
    int tmHeight;
    int tmAscent;
    int tmDescent;
    int tmInternalLeading;
    int tmExternalLeading;
    int tmAveCharWidth;
    int tmMaxCharWidth;
    int tmWeight;
    int tmOverhang;
    int tmDigitizedAspectX;
    int tmDigitizedAspectY;
    ubyte tmFirstChar;
    ubyte tmLastChar;
    ubyte tmDefaultChar;
    ubyte tmBreakChar;
    ubyte tmItalic;
    ubyte tmUnderlined;
    ubyte tmStruckOut;
    ubyte tmPitchAndFamily;
    ubyte tmCharSet;
    uint ntmFlags;
    uint ntmSizeEM;
    uint ntmCellHeight;
    uint ntmAvgWidth;
}

struct FONTSIGNATURE
{
    uint[4] fsUsb;
    uint[2] fsCsb;
}

struct NEWTEXTMETRICEXA
{
    NEWTEXTMETRICA ntmTm;
    FONTSIGNATURE ntmFontSig;
}

struct AXISINFOA
{
    int axMinValue;
    int axMaxValue;
    ubyte[16] axAxisName;
}

struct AXESLISTA
{
    uint axlReserved;
    uint axlNumAxes;
    AXISINFOA[16] axlAxisInfo;
}

struct ENUMTEXTMETRICA
{
    NEWTEXTMETRICEXA etmNewTextMetricEx;
    AXESLISTA etmAxesList;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; ENUMTEXTMETRICA サイズ: 488 バイト(x64)
dim st, 122    ; 4byte整数×122(構造体サイズ 488 / 4 切り上げ)
; etmNewTextMetricEx : NEWTEXTMETRICEXA (+0, 96byte)  varptr(st)+0 を基点に操作(96byte:入れ子/配列)
; etmAxesList : AXESLISTA (+96, 392byte)  varptr(st)+96 を基点に操作(392byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global NEWTEXTMETRICA
    #field int tmHeight
    #field int tmAscent
    #field int tmDescent
    #field int tmInternalLeading
    #field int tmExternalLeading
    #field int tmAveCharWidth
    #field int tmMaxCharWidth
    #field int tmWeight
    #field int tmOverhang
    #field int tmDigitizedAspectX
    #field int tmDigitizedAspectY
    #field byte tmFirstChar
    #field byte tmLastChar
    #field byte tmDefaultChar
    #field byte tmBreakChar
    #field byte tmItalic
    #field byte tmUnderlined
    #field byte tmStruckOut
    #field byte tmPitchAndFamily
    #field byte tmCharSet
    #field int ntmFlags
    #field int ntmSizeEM
    #field int ntmCellHeight
    #field int ntmAvgWidth
#endstruct

#defstruct global FONTSIGNATURE
    #field int fsUsb 4
    #field int fsCsb 2
#endstruct

#defstruct global NEWTEXTMETRICEXA
    #field NEWTEXTMETRICA ntmTm
    #field FONTSIGNATURE ntmFontSig
#endstruct

#defstruct global AXISINFOA
    #field int axMinValue
    #field int axMaxValue
    #field byte axAxisName 16
#endstruct

#defstruct global AXESLISTA
    #field int axlReserved
    #field int axlNumAxes
    #field AXISINFOA axlAxisInfo 16
#endstruct

#defstruct global ENUMTEXTMETRICA
    #field NEWTEXTMETRICEXA etmNewTextMetricEx
    #field AXESLISTA etmAxesList
#endstruct

stdim st, ENUMTEXTMETRICA        ; NSTRUCT 変数を確保