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

FONTSIGNATURE

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

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

フィールド

フィールドサイズx64x86説明
fsUsbDWORD16+0+0最大 126 個の Unicode サブレンジを識別する 128 ビットの Unicode サブセット ビットフィールド (USB) です。最上位の 2 ビットを除く各ビットが 1 つのサブレンジを表します。最上位ビットは常に 1 であり、このビットフィールドがフォント シグネチャであることを示します。2 番目に上位のビットは予約済みで、0 でなければなりません。Unicode サブレンジは ISO 10646 標準に従って番号が付けられています。詳細については、Unicode Subset Bitfields を参照してください。
fsCsbDWORD8+16+16特定の文字セットまたはコード ページを識別する 64 ビットのコード ページ ビットフィールド (CPB) です。コード ページはこのビットフィールドの下位 32 ビットに格納されます。上位 32 ビットは Windows 以外のコード ページに使用されます。詳細については、Code Page Bitfields を参照してください。

公式ドキュメント

指定されたフォントがグリフを提供するコード ページおよび Unicode サブレンジを識別する情報を格納します。

解説(Remarks)

GDI は、Windows のコード ページが 32 ビット値に収まることを前提としています。さらに、この値の上位 2 ビットは GDI の内部使用のために予約済みであり、コード ページに割り当てることはできません。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

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

[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;
}
Imports System.Runtime.InteropServices

<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
import ctypes
from ctypes import wintypes

class FONTSIGNATURE(ctypes.Structure):
    _fields_ = [
        ("fsUsb", wintypes.DWORD * 4),
        ("fsCsb", wintypes.DWORD * 2),
    ]
#[repr(C)]
pub struct FONTSIGNATURE {
    pub fsUsb: [u32; 4],
    pub fsCsb: [u32; 2],
}
import "golang.org/x/sys/windows"

type FONTSIGNATURE struct {
	fsUsb [4]uint32
	fsCsb [2]uint32
}
type
  FONTSIGNATURE = record
    fsUsb: array[0..3] of DWORD;
    fsCsb: array[0..1] of DWORD;
  end;
const FONTSIGNATURE = extern struct {
    fsUsb: [4]u32,
    fsCsb: [2]u32,
};
type
  FONTSIGNATURE {.bycopy.} = object
    fsUsb: array[4, uint32]
    fsCsb: array[2, uint32]
struct FONTSIGNATURE
{
    uint[4] fsUsb;
    uint[2] fsCsb;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; FONTSIGNATURE サイズ: 24 バイト(x64)
dim st, 6    ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; fsUsb : DWORD (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; fsCsb : DWORD (+16, 8byte)  varptr(st)+16 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global FONTSIGNATURE
    #field int fsUsb 4
    #field int fsCsb 2
#endstruct

stdim st, FONTSIGNATURE        ; NSTRUCT 変数を確保