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

PANOSE

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

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

フィールド

フィールドサイズx64x86説明
bFamilyTypePAN_FAMILY_TYPE1+0+0PANOSE分類のファミリ種別を示す値。
bSerifStylePAN_SERIF_STYLE1+1+1セリフのスタイルを示す値。
bWeightPAN_WEIGHT1+2+2フォントの太さ(ウェイト)を示す値。
bProportionPAN_PROPORTION1+3+3文字の比率(プロポーション)を示す値。
bContrastPAN_CONTRAST1+4+4ストロークのコントラストを示す値。
bStrokeVariationPAN_STROKE_VARIATION1+5+5ストロークの太さの変化を示す値。
bArmStylePAN_ARM_STYLE1+6+6アーム(腕)のスタイルを示す値。
bLetterformPAN_LETT_FORM1+7+7字形(レターフォーム)を示す値。
bMidlinePAN_MIDLINE1+8+8ミッドライン(中央線)のスタイルを示す値。
bXHeightPAN_XHEIGHT1+9+9エックスハイト(小文字の高さ)を示す値。

各言語での定義

#include <windows.h>

// PANOSE  (x64 10 / x86 10 バイト)
typedef struct PANOSE {
    PAN_FAMILY_TYPE bFamilyType;
    PAN_SERIF_STYLE bSerifStyle;
    PAN_WEIGHT bWeight;
    PAN_PROPORTION bProportion;
    PAN_CONTRAST bContrast;
    PAN_STROKE_VARIATION bStrokeVariation;
    PAN_ARM_STYLE bArmStyle;
    PAN_LETT_FORM bLetterform;
    PAN_MIDLINE bMidline;
    PAN_XHEIGHT bXHeight;
} PANOSE;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PANOSE
{
    public byte bFamilyType;
    public byte bSerifStyle;
    public byte bWeight;
    public byte bProportion;
    public byte bContrast;
    public byte bStrokeVariation;
    public byte bArmStyle;
    public byte bLetterform;
    public byte bMidline;
    public byte bXHeight;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PANOSE
    Public bFamilyType As Byte
    Public bSerifStyle As Byte
    Public bWeight As Byte
    Public bProportion As Byte
    Public bContrast As Byte
    Public bStrokeVariation As Byte
    Public bArmStyle As Byte
    Public bLetterform As Byte
    Public bMidline As Byte
    Public bXHeight As Byte
End Structure
import ctypes
from ctypes import wintypes

class PANOSE(ctypes.Structure):
    _fields_ = [
        ("bFamilyType", ctypes.c_ubyte),
        ("bSerifStyle", ctypes.c_ubyte),
        ("bWeight", ctypes.c_ubyte),
        ("bProportion", ctypes.c_ubyte),
        ("bContrast", ctypes.c_ubyte),
        ("bStrokeVariation", ctypes.c_ubyte),
        ("bArmStyle", ctypes.c_ubyte),
        ("bLetterform", ctypes.c_ubyte),
        ("bMidline", ctypes.c_ubyte),
        ("bXHeight", ctypes.c_ubyte),
    ]
#[repr(C)]
pub struct PANOSE {
    pub bFamilyType: u8,
    pub bSerifStyle: u8,
    pub bWeight: u8,
    pub bProportion: u8,
    pub bContrast: u8,
    pub bStrokeVariation: u8,
    pub bArmStyle: u8,
    pub bLetterform: u8,
    pub bMidline: u8,
    pub bXHeight: u8,
}
import "golang.org/x/sys/windows"

type PANOSE struct {
	bFamilyType byte
	bSerifStyle byte
	bWeight byte
	bProportion byte
	bContrast byte
	bStrokeVariation byte
	bArmStyle byte
	bLetterform byte
	bMidline byte
	bXHeight byte
}
type
  PANOSE = record
    bFamilyType: Byte;
    bSerifStyle: Byte;
    bWeight: Byte;
    bProportion: Byte;
    bContrast: Byte;
    bStrokeVariation: Byte;
    bArmStyle: Byte;
    bLetterform: Byte;
    bMidline: Byte;
    bXHeight: Byte;
  end;
const PANOSE = extern struct {
    bFamilyType: u8,
    bSerifStyle: u8,
    bWeight: u8,
    bProportion: u8,
    bContrast: u8,
    bStrokeVariation: u8,
    bArmStyle: u8,
    bLetterform: u8,
    bMidline: u8,
    bXHeight: u8,
};
type
  PANOSE {.bycopy.} = object
    bFamilyType: uint8
    bSerifStyle: uint8
    bWeight: uint8
    bProportion: uint8
    bContrast: uint8
    bStrokeVariation: uint8
    bArmStyle: uint8
    bLetterform: uint8
    bMidline: uint8
    bXHeight: uint8
struct PANOSE
{
    ubyte bFamilyType;
    ubyte bSerifStyle;
    ubyte bWeight;
    ubyte bProportion;
    ubyte bContrast;
    ubyte bStrokeVariation;
    ubyte bArmStyle;
    ubyte bLetterform;
    ubyte bMidline;
    ubyte bXHeight;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PANOSE サイズ: 10 バイト(x64)
dim st, 3    ; 4byte整数×3(構造体サイズ 10 / 4 切り上げ)
; bFamilyType : PAN_FAMILY_TYPE (+0, 1byte)  poke st,0,値  /  値 = peek(st,0)
; bSerifStyle : PAN_SERIF_STYLE (+1, 1byte)  poke st,1,値  /  値 = peek(st,1)
; bWeight : PAN_WEIGHT (+2, 1byte)  poke st,2,値  /  値 = peek(st,2)
; bProportion : PAN_PROPORTION (+3, 1byte)  poke st,3,値  /  値 = peek(st,3)
; bContrast : PAN_CONTRAST (+4, 1byte)  poke st,4,値  /  値 = peek(st,4)
; bStrokeVariation : PAN_STROKE_VARIATION (+5, 1byte)  poke st,5,値  /  値 = peek(st,5)
; bArmStyle : PAN_ARM_STYLE (+6, 1byte)  poke st,6,値  /  値 = peek(st,6)
; bLetterform : PAN_LETT_FORM (+7, 1byte)  poke st,7,値  /  値 = peek(st,7)
; bMidline : PAN_MIDLINE (+8, 1byte)  poke st,8,値  /  値 = peek(st,8)
; bXHeight : PAN_XHEIGHT (+9, 1byte)  poke st,9,値  /  値 = peek(st,9)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global PANOSE
    #field byte bFamilyType
    #field byte bSerifStyle
    #field byte bWeight
    #field byte bProportion
    #field byte bContrast
    #field byte bStrokeVariation
    #field byte bArmStyle
    #field byte bLetterform
    #field byte bMidline
    #field byte bXHeight
#endstruct

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