IFIMETRICS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| cjThis | DWORD | 4 | +0 | +0 | この構造体のサイズをバイト単位で指定します。指定するサイズには、この構造体の末尾に付加される Unicode 文字列と、省略可能な IFIEXTRA 構造体のバイト単位のサイズが含まれます。 | ||||||||||||||||||||
| cjIfiExtra | DWORD | 4 | +4 | +4 | この IFIMETRICS 構造体に続く IFIEXTRA 構造体のサイズをバイト単位で指定します。値が 0 の場合は、IFIEXTRA 構造体が存在しないことを示します。 | ||||||||||||||||||||
| dpwszFamilyName | INT | 4 | +8 | +8 | フォントのファミリ名 (たとえば "Times Roman") を格納した null 終端の Unicode 文字列へのオフセットをバイト単位で指定します。通常、この文字列は IFIMETRICS 構造体の直後に配置されます。この文字列は、Win32 の LOGFONT 構造体の lfFaceName メンバーに記録される名前と同じでなければなりません。 | ||||||||||||||||||||
| dpwszStyleName | INT | 4 | +12 | +12 | フォントのスタイル (たとえば "Bold") を記述した null 終端の Unicode 文字列へのオフセットをバイト単位で指定します。 | ||||||||||||||||||||
| dpwszFaceName | INT | 4 | +16 | +16 | フォントの一意で完全な名前を表す null 終端の Unicode 文字列へのオフセットをバイト単位で指定します。この名前にはフォントのファミリ名とサブファミリ名が含まれます (たとえば "Times New Roman Bold")。 | ||||||||||||||||||||
| dpwszUniqueName | INT | 4 | +20 | +20 | フォントの一意な識別子を表す null 終端の Unicode 文字列へのオフセットをバイト単位で指定します (たとえば "Monotype:Times New Roman:1990")。 | ||||||||||||||||||||
| dpFontSim | INT | 4 | +24 | +24 | この IFIMETRICS 構造体の先頭から、フォントがサポートするシミュレーションを記述する FONTSIM 構造体までのオフセットをバイト単位で指定します。ドライバーは、フォントが bold、italic、または bold italic のシミュレーションをサポートする場合にのみ、このメンバーに 0 以外の値を設定してください。それ以外の場合は 0 を設定します。 フォントが設計上イタリックである場合、ドライバーは italic シミュレーションのサポートを示すべきではありませんが、bold italic シミュレーションのサポートを示すことはできます。同様に、フォントが設計上ボールドである場合、ドライバーは bold シミュレーションのサポートを示すべきではありませんが、bold italic シミュレーションのサポートを示すことはできます。フォントが設計上ボールドかつイタリックである場合は、いずれのシミュレーションもサポートすべきではありません。 FONTSIM 構造体内のオフセットは、FONTSIM 構造体の先頭からの相対値です。 | ||||||||||||||||||||
| lEmbedId | INT | 4 | +28 | +28 | フォントの Embedding ID を指定します。この値は TrueType 固有であり、それ以外のフォントプロバイダーは 0 を設定してください。 | ||||||||||||||||||||
| lItalicAngle | INT | 4 | +32 | +32 | フォントのイタリック角度を指定します。この値は TrueType 固有であり、それ以外のフォントプロバイダーは 0 を設定してください。 | ||||||||||||||||||||
| lCharBias | INT | 4 | +36 | +36 | 文字バイアスを指定します。この値は TrueType 固有であり、それ以外のフォントプロバイダーは 0 を設定してください。 | ||||||||||||||||||||
| dpCharSets | INT | 4 | +40 | +40 | この IFIMETRICS 構造体の先頭から、このフォントがサポートするすべての Windows 文字セットの一覧を格納した配列までのオフセットを指定します。この配列のサイズは 16 バイトで、常に DEFAULT_CHARSET で終端されます。配列の最初の値は、そのフォントで最も適切かつ完全にカバーされている Windows 文字セットを示す必要があります。この値は jWinCharSet にも格納してください。たとえば、US ANSI とキリル文字セットもサポートする日本語フォントの場合、jWinCharSet には SHIFTJIS_CHARSET を設定し、dpCharSets が示す配列には SHIFTJIS_CHARSET、ANSI_CHARSET、RUSSIAN_CHARSET、DEFAULT_CHARSET を格納します。 このフォントが複数の Windows 文字セットをサポートしない場合、dpCharSets には 0 を設定してください。 | ||||||||||||||||||||
| jWinCharSet | BYTE | 1 | +44 | +44 | このフォントが最も適切にサポートする文字セットを示します。フォントが単一の Windows 文字セットのみをサポートする場合、ドライバーは対応する値を jWinCharSet に格納してください。ドライバーはこのフィールドに DEFAULT_CHARSET を格納すべきではありません。 指定できる値の一覧については、LOGFONT 構造体の lfCharSet フィールドを参照してください。 | ||||||||||||||||||||
| jWinPitchAndFamily | BYTE | 1 | +45 | +45 | フォントのピッチを指定します。下位 2 ビットがフォントのピッチを指定し、次のいずれかの値になります。
このメンバーのビット 4 から 7 はフォントファミリを指定し、次のいずれかの値になります。
| ||||||||||||||||||||
| usWinWeight | WORD | 2 | +46 | +46 | フォントの太さを 0 から 1000 の範囲で指定します (たとえば 400 が標準、700 がボールド)。この値は、Win32 の LOGFONT 構造体の lfWeight メンバーとしてアプリケーションに提供されます。 | ||||||||||||||||||||
| flInfo | DWORD | 4 | +48 | +48 | フォントに関する追加情報を指定します。このフィールドには次のフラグ値の組み合わせを指定できます。 FM_INFO_1BPPグリフビットマップの色深度が 1 ピクセルあたり 1 ビットであることを示します。Windows NT の最初のバージョンである Windows NT 3.1 では、このフラグを設定しなければなりません。 FM_INFO_4BPPグリフビットマップの色深度が 1 ピクセルあたり 4 ビットであることを示します。フォントが 16 階調のグレーによるアンチエイリアス処理されたグリフビットマップをサポートする場合、ドライバーはこのフラグを設定してください。 FM_INFO_8BPPグリフビットマップの色深度が 1 ピクセルあたり 8 ビットであることを示します。現在のバージョンの GDI はカラーフォントをサポートしていないため、この設定を無視します。 FM_INFO_16BPPグリフビットマップの色深度が 1 ピクセルあたり 16 ビットであることを示します。現在のバージョンの GDI はカラーフォントをサポートしていないため、この設定を無視します。 FM_INFO_24BPPグリフビットマップの色深度が 1 ピクセルあたり 24 ビットであることを示します。現在のバージョンの GDI はカラーフォントをサポートしていないため、この設定を無視します。 FM_INFO_32BPPグリフビットマップの色深度が 1 ピクセルあたり 32 ビットであることを示します。現在のバージョンの GDI はカラーフォントをサポートしていないため、この設定を無視します。 FM_INFO_90DEGREE_ROTATIONS元の名目上の形状を 90 度回転した状態でフォントを実体化できることを示します。GDI は、フォントの作成時にドライバーへ渡す名目座標からデバイス座標への変換に回転を含めることで、フォントの回転を要求します。このメンバーは、FM_INFO_ARB_XFORMS フラグが設定されていない場合にのみ意味を持ちます。 FM_INFO_ANISOTROPIC_SCALING_ONLYフォントが任意の異方性スケーリングのみをサポートすることを示します。つまり、変換は対角行列に正の実数を乗じたものと等価です。このフラグが設定されている場合、FM_INFO_ARB_XFORMS フラグと FM_INFO_ISOTROPIC_SCALING_ONLY フラグは設定できません。FM_INFO_90DEGREE_ROTATIONS フラグも設定されている場合、フォントは単純な異方性スケーリングの後に 90 度の倍数の回転を行う変換をサポートします。 FM_INFO_ARB_XFORMSフォントが 2 次元線形変換の連続的な範囲で実体化できることを示します。 FM_INFO_CONSTANT_WIDTHこのフォントのすべてのグリフが、あらゆる実体化において同じ文字送り幅を持つことを示します。このフラグが設定されている場合、FM_INFO_OPTICALLY_FIXED_PITCH フラグも設定しなければなりません。 FM_INFO_DBCS_FIXED_PITCHこのフォントの 2 バイト文字が固定ピッチであることを示します。1 バイト文字については何も意味しません。このフラグは、シフト JIS などの 2 バイト文字セット (DBCS) をサポートするフォントでのみ意味を持ちます。DBCS をサポートしないフォントは、このフラグを設定すべきではありません。 FM_INFO_DO_NOT_ENUMERATEこのフォントが Win32 の EnumFontFamiliesEx、EnumFontFamilies、EnumFonts ルーチンによって列挙されないことを示します。さらに、Win32 アプリケーションが GetTextFace を呼び出したときに返される文字列は、文字列 dpwszUniqueName から取得されます。このフラグにより、フォントプロバイダーは 1 つのフォントに複数の IFIMETRICS 構造体を関連付けることができます。 FM_INFO_DSIGフォントが Unicode 標準に準拠していることを示します。 FM_INFO_FAMILY_EQUIVIFIMETRICS の dpwszFamilyName オフセットが、実際には同等のファミリ名またはエイリアスの一覧へのオフセットであることを示します。最初の名前が基本名 (実際の名前) であり、それ以降の名前は同等名またはエイリアスです。一覧内の各名前は null 終端され、一覧全体は 2 つの 0 で終端されます。
基本名はマッピングにのみ使用され、列挙されることはありません。 FM_INFO_IGNORE_TC_RA_ABLEこのフォントでは TC_RA_ABLE フラグが無視されることを示します。 FM_INFO_INTEGER_WIDTHすべてのグリフが小数部を持たない送り幅を持つことを示します。ビットマップフォントは通常、このフラグを設定します。 FM_INFO_INTEGRAL_SCALINGフォントを x 方向と y 方向の両方で整数倍にスケーリングできることを示します。このフラグが設定されている場合、ドライバーは名目座標からデバイス座標への変換が x 方向と y 方向に整数倍でスケーリングされた場合でも、グリフを描画できなければなりません。GDI は、フォントの作成時にドライバーへ渡す名目座標からデバイス座標への変換に軸方向のスケーリングを含めることで、フォントの整数倍スケーリングを要求します。このフラグは、FM_INFO_ARB_XFORMS フラグが設定されていない場合にのみ意味を持ちます。 FM_INFO_ISOTROPIC_SCALING_ONLYフォントが任意の等方性スケーリングのみをサポートすることを示します。つまり、変換は単位行列に正の実数を乗じたものと等価です。このフラグが設定されている場合、FM_INFO_ARB_XFORMS フラグと FM_INFO_ANISOTROPIC_SCALING_ONLY フラグのいずれも設定できません。FM_INFO_90DEGREE_ROTATIONS フラグが設定されている場合、フォントは等方性スケーリングの後に 90 度の倍数の回転を行う変換と等価な変換をサポートします。 FM_INFO_OPTICALLY_FIXED_PITCHこのフォントが組版上は固定ピッチとみなされることを示します。これはフォントの視覚的な性質であり、フォントのすべてのグリフが同じ文字送り幅を持つことを必ずしも意味しません。 FM_INFO_NONNEGATIVE_ACこのフォントのすべてのグリフが、非負の a スペーシングおよび c スペーシングを持つことを示します。つまり、グリフのブラックボックスが、文字原点と文字連結点で区切られた領域の外にはみ出すことはありません。 FM_INFO_NOT_CONTIGUOUSサポートされる文字セットが連続していないことを示します。 FM_INFO_RETURNS_BITMAPSフォントに有効なデジタル署名が含まれていることを示します。 FM_INFO_RETURNS_OUTLINESドライバーがサポートする任意のグリフについて、GDI がそのグリフのアウトラインを記述する PATHOBJ 構造体を要求できることを示します。可能であれば、GDI のパス塗りつぶし規則に従ってアウトラインを塗りつぶしたときに得られるビットマップは、ドライバーが返すビットマップと同一になるべきです。FM_INFO_RETURNS_OUTLINES フラグと FM_INFO_RETURNS_STOKES フラグを同時に設定することはできません。 FM_INFO_RETURNS_STROKESドライバーがサポートする任意のグリフについて、GDI がそのグリフのスプラインを記述する PATHOBJ 構造体を要求できることを示します。このパスは塗りつぶすことはできませんが、ストロークを描くことでグリフを表現できます。FM_INFO_RETURNS_OUTLINES フラグと FM_INFO_RETURNS_STOKES フラグを同時に設定することはできません。 FM_INFO_RIGHT_HANDEDフォントのアセント方向が、ベースライン方向から反時計回りに 90 度の方向であることを示します。アセント方向は高さを測る方向であり、常にベースライン方向に対して垂直です。 FM_INFO_TECH_BITMAPフォントがビットマップフォントであることを示します。 FM_INFO_TECH_CFFフォントが Compact Font Format (CFF) テーブルを含む Pscript OpenType フォントであることを示します。 FM_INFO_TECH_MMこれが Multiple Master (MM) フォントであることを示します。 FM_INFO_TECH_OUTLINE_NOT_TRUETYPEフォントがアウトラインパスを使用するスケーラブルなフォント技術に基づいているものの、TrueType に基づくものではないことを示します。このフラグは、このフォントに対して返されるパスを塗りつぶすべきか、ストロークすべきかは指定しません。利用側は、この情報について FM_INFO_RETURNS_STROKES フラグと FM_INFO_RETURNS_OUTLINES フラグを調べてください。 FM_INFO_TECH_STROKEフォントがストロークベースのフォント技術に基づいていることを示します。このフラグは、このフォントに対して返されるパスを塗りつぶすべきか、ストロークすべきかは指定しません。利用側は、この情報について FM_INFO_RETURNS_STROKES フラグと FM_INFO_RETURNS_OUTLINES フラグを調べてください。 FM_INFO_TECH_TRUETYPEフォントが TrueType フォントであることを示します。 FM_INFO_TECH_TYPE1このフォントが PostScript のスクリーンフォント (Type1 または OpenType PostScript) であることを示します。 | ||||||||||||||||||||
| fsSelection | WORD | 2 | +52 | +52 | 次のフラグの組み合わせを指定します。
| ||||||||||||||||||||
| fsType | WORD | 2 | +54 | +54 | これは TrueType 固有のビットフィールドで、フォントの埋め込みやフォントのライセンス許諾など、フォントの特定の属性を示します。埋め込み可能なフォントはドキュメント内に格納できます。埋め込みフォントを含むドキュメントを、そのフォントがインストールされていないシステム (リモートシステム) で開いた場合、埋め込みに対応したアプリケーションによって、そのシステム上で一時的に (場合によっては恒久的に) 埋め込みフォントを読み込むことができます。埋め込みのライセンス許諾はフォントベンダーによって付与されます。設定できるフラグは次のとおりです。
FM_READONLY_EMBED ビットが設定されているフォントは、ドキュメント内に埋め込むことはできるものの、リモートシステム上には一時的にのみインストールしなければならないことを示します。FM_READONLY_EMBED フォントを含むドキュメントは、必ず "読み取り専用" で開かなければなりません。つまり、アプリケーションはユーザーにドキュメントの表示や印刷を許可できますが、編集を許可することはできません。 FM_EDITABLE_EMBED ビットが設定されているフォントは、ドキュメント内に埋め込むことはできるものの、リモートシステム上には一時的にのみインストールしなければならないことを示します。FM_READONLY_EMBED フォントとは異なり、Editable フォントを含むドキュメントは "読み取り/書き込み" で開くことができ、編集が許可され、変更を保存できます。 fsType のビットが 1 つも設定されていないフォントは、アプリケーションによってリモートシステムに埋め込み、恒久的にインストールできることを示します。リモートシステムのユーザーは、そのフォントについて元の購入者と同一の権利、義務、ライセンスを取得し、元の購入者と同じエンドユーザー使用許諾契約、著作権、意匠特許、商標の対象となります。 Font Embedding DLL を使用する場合であれ、その他の手段による場合であれ、フォント埋め込みのサポートを実装するアプリケーションは、埋め込みが許可されていないフォントを埋め込んではなりません。さらに、埋め込みフォントを一時的に使用するために読み込むアプリケーションは、その埋め込みフォントを含むドキュメントを閉じるときに、フォントを必ず削除しなければなりません。 複数の埋め込みビットが設定されている場合は、付与されたライセンスのうち最も制限の緩いものが優先されます。たとえば、ビット 1 とビット 3 が設定されている場合、ビット 3 がビット 1 より優先され、フォントは Editable の権利で埋め込むことができます。互換性のため、Editable の埋め込み権を付与するほとんどのベンダーは Preview & Print ビット (0x000C) も設定します。これにより、Preview & Print の埋め込みのみをサポートするアプリケーションが、フォントの埋め込みが許可されていることを検出できます。 | ||||||||||||||||||||
| fwdUnitsPerEm | SHORT | 2 | +56 | +56 | フォントの em の高さを指定します。 | ||||||||||||||||||||
| fwdLowestPPEm | SHORT | 2 | +58 | +58 | フォントが読み取り可能な最小サイズをピクセル単位で指定します。この値はビットマップフォントでは無視されます。 | ||||||||||||||||||||
| fwdWinAscender | SHORT | 2 | +60 | +60 | フォントの Windows アセンダー値を指定します。 | ||||||||||||||||||||
| fwdWinDescender | SHORT | 2 | +62 | +62 | フォントの Windows ディセンダー値を指定します。 | ||||||||||||||||||||
| fwdMacAscender | SHORT | 2 | +64 | +64 | フォントの Macintosh アセンダー値を指定します。 | ||||||||||||||||||||
| fwdMacDescender | SHORT | 2 | +66 | +66 | フォントの Macintosh ディセンダー値を指定します。この値は通常 0 未満です。これは、Macintosh 文字セットで最も低いディセンダーの、ベースラインからの符号付き変位を表します。 | ||||||||||||||||||||
| fwdMacLineGap | SHORT | 2 | +68 | +68 | フォントの Macintosh 行間 (ラインギャップ) を指定します。推奨される Macintosh の行間隔は fwdMacLineGap + fwdMacAscender − fwdMacDescender に等しくなります。 | ||||||||||||||||||||
| fwdTypoAscender | SHORT | 2 | +70 | +70 | フォントの組版上のアセンダー値を指定します。 | ||||||||||||||||||||
| fwdTypoDescender | SHORT | 2 | +72 | +72 | フォントの組版上のディセンダー値を指定します。この値は、最も低いディセンダーのベースラインからの符号付き変位を指定します。 | ||||||||||||||||||||
| fwdTypoLineGap | SHORT | 2 | +74 | +74 | フォントの組版上の行間 (ラインギャップ) を指定します。 | ||||||||||||||||||||
| fwdAveCharWidth | SHORT | 2 | +76 | +76 | ラテン文字アルファベットの小文字 'a' から 'z' までの 26 文字と空白文字の幅の相加平均を指定します。26 文字の小文字のいずれかが存在しない場合、このメンバーにはフォント内のすべてのグリフの加重平均を設定してください。 | ||||||||||||||||||||
| fwdMaxCharInc | SHORT | 2 | +78 | +78 | フォント内のすべてのグリフのうち、最大の文字送り幅を指定します。 | ||||||||||||||||||||
| fwdCapHeight | SHORT | 2 | +80 | +80 | 大文字 'H' の上端を表す光学的なラインの高さを、フォント単位 (FUnits) で指定します。これは大文字 'H' の実測の高さと同じであるとは限りません。この情報が存在しない場合、fwdCapHeight には 0 を設定します。0 は未定義であることを示します。 | ||||||||||||||||||||
| fwdXHeight | SHORT | 2 | +82 | +82 | 小文字 'x' の高さを表す光学的なラインの高さを、フォント単位で指定します。これは小文字 'x' の実測の高さと同じであるとは限りません。値が 0 の場合、このメンバーは未定義であることを示します。 | ||||||||||||||||||||
| fwdSubscriptXSize | SHORT | 2 | +84 | +84 | 下付き文字フォントの推奨される文字幅 (ベースライン方向のサイズ) を指定します。 | ||||||||||||||||||||
| fwdSubscriptYSize | SHORT | 2 | +86 | +86 | 下付き文字フォントの推奨される文字の高さ (アセンダー方向のサイズ) を指定します。 | ||||||||||||||||||||
| fwdSubscriptXOffset | SHORT | 2 | +88 | +88 | 下付き文字の、ベースライン方向における推奨されるオフセットを指定します。このオフセットは、基準となる文字の文字原点を基準とします。 | ||||||||||||||||||||
| fwdSubscriptYOffset | SHORT | 2 | +90 | +90 | 下付き文字の、ベースライン方向における推奨されるオフセットを指定します。このオフセットは、基準となる文字の文字原点から測ります。 | ||||||||||||||||||||
| fwdSuperscriptXSize | SHORT | 2 | +92 | +92 | 上付き文字フォントの推奨される文字幅 (ベースライン方向のサイズ) を指定します。 | ||||||||||||||||||||
| fwdSuperscriptYSize | SHORT | 2 | +94 | +94 | 上付き文字フォントの推奨される文字の高さ (アセンダー方向のサイズ) を指定します。 | ||||||||||||||||||||
| fwdSuperscriptXOffset | SHORT | 2 | +96 | +96 | 上付き文字の、ベースライン方向における推奨されるオフセットを指定します。このオフセットは、基準となる文字の文字原点から測ります。 | ||||||||||||||||||||
| fwdSuperscriptYOffset | SHORT | 2 | +98 | +98 | 上付き文字の、ベースライン方向における推奨されるオフセットを指定します。このオフセットは、基準となる文字の文字原点から測ります。 | ||||||||||||||||||||
| fwdUnderscoreSize | SHORT | 2 | +100 | +100 | 下線バーの推奨される幅を、フォント単位で指定します。 | ||||||||||||||||||||
| fwdUnderscorePosition | SHORT | 2 | +102 | +102 | ベースラインから下線バーの中央までの推奨される変位を、フォント単位で指定します。 | ||||||||||||||||||||
| fwdStrikeoutSize | SHORT | 2 | +104 | +104 | 取り消し線バーの推奨される幅を、フォント座標で指定します。 | ||||||||||||||||||||
| fwdStrikeoutPosition | SHORT | 2 | +106 | +106 | ベースラインから取り消し線バーの中央までの推奨される変位を指定します。 | ||||||||||||||||||||
| chFirstChar | BYTE | 1 | +108 | +108 | jWinCharSet で指定されたコードページでサポートされる最小の文字を指定します。このフィールドは Windows 3.1 との互換性のために提供されています。 | ||||||||||||||||||||
| chLastChar | BYTE | 1 | +109 | +109 | jWinCharSet で指定されたコードページでサポートされる最大の文字を指定します。このフィールドは Windows 3.1 との互換性のために提供されています。 | ||||||||||||||||||||
| chDefaultChar | BYTE | 1 | +110 | +110 | jWinCharSet で指定されたコードページの既定の文字を指定します。このフィールドは Windows 3.1 との互換性のために提供されています。 | ||||||||||||||||||||
| chBreakChar | BYTE | 1 | +111 | +111 | jWinCharSet で指定されたコードページのブレーク文字を指定します。このフィールドは Windows 3.1 との互換性のために提供されています。 | ||||||||||||||||||||
| wcFirstChar | WCHAR | 2 | +112 | +112 | サポートされる文字のうち、最も小さい Unicode 文字コードを持つ文字を指定します。 | ||||||||||||||||||||
| wcLastChar | WCHAR | 2 | +114 | +114 | サポートされる文字のうち、最も大きい Unicode 文字コードを持つ文字を指定します。 | ||||||||||||||||||||
| wcDefaultChar | WCHAR | 2 | +116 | +116 | アプリケーションがフォントでサポートされていない文字を要求した場合に、代替として使用される文字を指定します。 | ||||||||||||||||||||
| wcBreakChar | WCHAR | 2 | +118 | +118 | 空白文字またはそれに相当する文字のコードポイントを指定します。 | ||||||||||||||||||||
| ptlBaseline | POINTL | 8 | +120 | +120 | このフォントが意図する書字方向を格納した POINTL 構造体を指定します。たとえば、一般的なラテン文字フォントでは (1,0) という値を指定します。 | ||||||||||||||||||||
| ptlAspect | POINTL | 8 | +128 | +128 | ビットマップフォントが設計された際のピクセル中心のアスペクト比を格納した POINTL 構造体を指定します。この値はビットマップフォントでのみ使用されます。 | ||||||||||||||||||||
| ptlCaret | POINTL | 8 | +136 | +136 | フォントのアセンダー方向を格納した POINTL 構造体を指定します。たとえば、イタリックでないラテン文字フォントの値は (0,1) であり、イタリックのラテン文字フォントでは (2,5) のような値を指定することがあります。 | ||||||||||||||||||||
| rclFontBox | RECTL | 16 | +144 | +144 | デザイン空間におけるフォント内のすべてのグリフの境界ボックスを記述する RECTL 構造体を指定します。 | ||||||||||||||||||||
| achVendId | BYTE | 4 | +160 | +160 | フォントベンダーを表す 4 文字の識別子を指定します。識別子は Microsoft TrueType 仕様に記載されています。 | ||||||||||||||||||||
| cKerningPairs | DWORD | 4 | +164 | +164 | このフォントに関連付けられたカーニングペアの数を指定します。 | ||||||||||||||||||||
| ulPanoseCulture | DWORD | 4 | +168 | +168 | PANOSE 番号の解釈方法を指定します。ラテン文字ベースのフォントでは、この番号を FM_PANOSE_CULTURE_LATIN に設定してください。PANOSE 構造体については、Microsoft Windows SDK のドキュメントを参照してください。 | ||||||||||||||||||||
| panose | PANOSE | 10 | +172 | +172 | 特定の書体の視覚的特徴を記述するために使用される 10 バイトの配列です。これらの特徴は、名前は異なるものの外観が類似する他のフォントとそのフォントを関連付けるために使用されます。PANOSE 構造体については、Windows SDK のドキュメントを参照してください。 |
公式ドキュメント
IFIMETRICS 構造体は、GDI が使用できる特定の書体に関する情報を定義します。
解説(Remarks)
書体に関する追加情報は、必要に応じて IFIEXTRA 構造体で指定できます。
ドライバーの DrvQueryFont ルーチンは、IFIMETRICS 構造体に値を設定して GDI に返します。
IFIMETRICS 構造体は、GDI が解釈できる書体のすべての情報を定義します。ほとんどのメンバーは FWORD 値であり、これはデザイン空間における符号付き 16 ビットの量です。フォントがラスターフォントの場合、デザイン空間とデバイス空間は同一であり、1 フォント単位はピクセル間の距離に相当します。
フォント空間 (名目空間) の座標系では、y 座標は上方向に増加し、x 座標は右方向に増加します。
IFIMETRICS 構造体の Align メンバーにより、この構造体は x32 マシンよりも x64 マシンで大きくなります。このことは、この構造体に従って書式化されたバイナリのフォント形式ファイルに影響します。Windows Server 2003 SP1 以降、固定サイズの構造体 PRINTIFI32 が Prntfont.h に追加されました。PRINTIFI32 構造体は、Align メンバーを含まない点を除いて IFIMETRICS 構造体と同一です。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// POINTL (x64 8 / x86 8 バイト)
typedef struct POINTL {
INT x;
INT y;
} POINTL;
// RECTL (x64 16 / x86 16 バイト)
typedef struct RECTL {
INT left;
INT top;
INT right;
INT bottom;
} RECTL;
// 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;
// IFIMETRICS (x64 184 / x86 184 バイト)
typedef struct IFIMETRICS {
DWORD cjThis;
DWORD cjIfiExtra;
INT dpwszFamilyName;
INT dpwszStyleName;
INT dpwszFaceName;
INT dpwszUniqueName;
INT dpFontSim;
INT lEmbedId;
INT lItalicAngle;
INT lCharBias;
INT dpCharSets;
BYTE jWinCharSet;
BYTE jWinPitchAndFamily;
WORD usWinWeight;
DWORD flInfo;
WORD fsSelection;
WORD fsType;
SHORT fwdUnitsPerEm;
SHORT fwdLowestPPEm;
SHORT fwdWinAscender;
SHORT fwdWinDescender;
SHORT fwdMacAscender;
SHORT fwdMacDescender;
SHORT fwdMacLineGap;
SHORT fwdTypoAscender;
SHORT fwdTypoDescender;
SHORT fwdTypoLineGap;
SHORT fwdAveCharWidth;
SHORT fwdMaxCharInc;
SHORT fwdCapHeight;
SHORT fwdXHeight;
SHORT fwdSubscriptXSize;
SHORT fwdSubscriptYSize;
SHORT fwdSubscriptXOffset;
SHORT fwdSubscriptYOffset;
SHORT fwdSuperscriptXSize;
SHORT fwdSuperscriptYSize;
SHORT fwdSuperscriptXOffset;
SHORT fwdSuperscriptYOffset;
SHORT fwdUnderscoreSize;
SHORT fwdUnderscorePosition;
SHORT fwdStrikeoutSize;
SHORT fwdStrikeoutPosition;
BYTE chFirstChar;
BYTE chLastChar;
BYTE chDefaultChar;
BYTE chBreakChar;
WCHAR wcFirstChar;
WCHAR wcLastChar;
WCHAR wcDefaultChar;
WCHAR wcBreakChar;
POINTL ptlBaseline;
POINTL ptlAspect;
POINTL ptlCaret;
RECTL rclFontBox;
BYTE achVendId[4];
DWORD cKerningPairs;
DWORD ulPanoseCulture;
PANOSE panose;
} IFIMETRICS;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct POINTL
{
public int x;
public int y;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RECTL
{
public int left;
public int top;
public int right;
public int bottom;
}
[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;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct IFIMETRICS
{
public uint cjThis;
public uint cjIfiExtra;
public int dpwszFamilyName;
public int dpwszStyleName;
public int dpwszFaceName;
public int dpwszUniqueName;
public int dpFontSim;
public int lEmbedId;
public int lItalicAngle;
public int lCharBias;
public int dpCharSets;
public byte jWinCharSet;
public byte jWinPitchAndFamily;
public ushort usWinWeight;
public uint flInfo;
public ushort fsSelection;
public ushort fsType;
public short fwdUnitsPerEm;
public short fwdLowestPPEm;
public short fwdWinAscender;
public short fwdWinDescender;
public short fwdMacAscender;
public short fwdMacDescender;
public short fwdMacLineGap;
public short fwdTypoAscender;
public short fwdTypoDescender;
public short fwdTypoLineGap;
public short fwdAveCharWidth;
public short fwdMaxCharInc;
public short fwdCapHeight;
public short fwdXHeight;
public short fwdSubscriptXSize;
public short fwdSubscriptYSize;
public short fwdSubscriptXOffset;
public short fwdSubscriptYOffset;
public short fwdSuperscriptXSize;
public short fwdSuperscriptYSize;
public short fwdSuperscriptXOffset;
public short fwdSuperscriptYOffset;
public short fwdUnderscoreSize;
public short fwdUnderscorePosition;
public short fwdStrikeoutSize;
public short fwdStrikeoutPosition;
public byte chFirstChar;
public byte chLastChar;
public byte chDefaultChar;
public byte chBreakChar;
public char wcFirstChar;
public char wcLastChar;
public char wcDefaultChar;
public char wcBreakChar;
public POINTL ptlBaseline;
public POINTL ptlAspect;
public POINTL ptlCaret;
public RECTL rclFontBox;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public byte[] achVendId;
public uint cKerningPairs;
public uint ulPanoseCulture;
public PANOSE panose;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure POINTL
Public x As Integer
Public y As Integer
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure RECTL
Public left As Integer
Public top As Integer
Public right As Integer
Public bottom As Integer
End Structure
<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
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure IFIMETRICS
Public cjThis As UInteger
Public cjIfiExtra As UInteger
Public dpwszFamilyName As Integer
Public dpwszStyleName As Integer
Public dpwszFaceName As Integer
Public dpwszUniqueName As Integer
Public dpFontSim As Integer
Public lEmbedId As Integer
Public lItalicAngle As Integer
Public lCharBias As Integer
Public dpCharSets As Integer
Public jWinCharSet As Byte
Public jWinPitchAndFamily As Byte
Public usWinWeight As UShort
Public flInfo As UInteger
Public fsSelection As UShort
Public fsType As UShort
Public fwdUnitsPerEm As Short
Public fwdLowestPPEm As Short
Public fwdWinAscender As Short
Public fwdWinDescender As Short
Public fwdMacAscender As Short
Public fwdMacDescender As Short
Public fwdMacLineGap As Short
Public fwdTypoAscender As Short
Public fwdTypoDescender As Short
Public fwdTypoLineGap As Short
Public fwdAveCharWidth As Short
Public fwdMaxCharInc As Short
Public fwdCapHeight As Short
Public fwdXHeight As Short
Public fwdSubscriptXSize As Short
Public fwdSubscriptYSize As Short
Public fwdSubscriptXOffset As Short
Public fwdSubscriptYOffset As Short
Public fwdSuperscriptXSize As Short
Public fwdSuperscriptYSize As Short
Public fwdSuperscriptXOffset As Short
Public fwdSuperscriptYOffset As Short
Public fwdUnderscoreSize As Short
Public fwdUnderscorePosition As Short
Public fwdStrikeoutSize As Short
Public fwdStrikeoutPosition As Short
Public chFirstChar As Byte
Public chLastChar As Byte
Public chDefaultChar As Byte
Public chBreakChar As Byte
Public wcFirstChar As Char
Public wcLastChar As Char
Public wcDefaultChar As Char
Public wcBreakChar As Char
Public ptlBaseline As POINTL
Public ptlAspect As POINTL
Public ptlCaret As POINTL
Public rclFontBox As RECTL
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Public achVendId() As Byte
Public cKerningPairs As UInteger
Public ulPanoseCulture As UInteger
Public panose As PANOSE
End Structureimport ctypes
from ctypes import wintypes
class POINTL(ctypes.Structure):
_fields_ = [
("x", ctypes.c_int),
("y", ctypes.c_int),
]
class RECTL(ctypes.Structure):
_fields_ = [
("left", ctypes.c_int),
("top", ctypes.c_int),
("right", ctypes.c_int),
("bottom", ctypes.c_int),
]
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),
]
class IFIMETRICS(ctypes.Structure):
_fields_ = [
("cjThis", wintypes.DWORD),
("cjIfiExtra", wintypes.DWORD),
("dpwszFamilyName", ctypes.c_int),
("dpwszStyleName", ctypes.c_int),
("dpwszFaceName", ctypes.c_int),
("dpwszUniqueName", ctypes.c_int),
("dpFontSim", ctypes.c_int),
("lEmbedId", ctypes.c_int),
("lItalicAngle", ctypes.c_int),
("lCharBias", ctypes.c_int),
("dpCharSets", ctypes.c_int),
("jWinCharSet", ctypes.c_ubyte),
("jWinPitchAndFamily", ctypes.c_ubyte),
("usWinWeight", ctypes.c_ushort),
("flInfo", wintypes.DWORD),
("fsSelection", ctypes.c_ushort),
("fsType", ctypes.c_ushort),
("fwdUnitsPerEm", ctypes.c_short),
("fwdLowestPPEm", ctypes.c_short),
("fwdWinAscender", ctypes.c_short),
("fwdWinDescender", ctypes.c_short),
("fwdMacAscender", ctypes.c_short),
("fwdMacDescender", ctypes.c_short),
("fwdMacLineGap", ctypes.c_short),
("fwdTypoAscender", ctypes.c_short),
("fwdTypoDescender", ctypes.c_short),
("fwdTypoLineGap", ctypes.c_short),
("fwdAveCharWidth", ctypes.c_short),
("fwdMaxCharInc", ctypes.c_short),
("fwdCapHeight", ctypes.c_short),
("fwdXHeight", ctypes.c_short),
("fwdSubscriptXSize", ctypes.c_short),
("fwdSubscriptYSize", ctypes.c_short),
("fwdSubscriptXOffset", ctypes.c_short),
("fwdSubscriptYOffset", ctypes.c_short),
("fwdSuperscriptXSize", ctypes.c_short),
("fwdSuperscriptYSize", ctypes.c_short),
("fwdSuperscriptXOffset", ctypes.c_short),
("fwdSuperscriptYOffset", ctypes.c_short),
("fwdUnderscoreSize", ctypes.c_short),
("fwdUnderscorePosition", ctypes.c_short),
("fwdStrikeoutSize", ctypes.c_short),
("fwdStrikeoutPosition", ctypes.c_short),
("chFirstChar", ctypes.c_ubyte),
("chLastChar", ctypes.c_ubyte),
("chDefaultChar", ctypes.c_ubyte),
("chBreakChar", ctypes.c_ubyte),
("wcFirstChar", ctypes.c_wchar),
("wcLastChar", ctypes.c_wchar),
("wcDefaultChar", ctypes.c_wchar),
("wcBreakChar", ctypes.c_wchar),
("ptlBaseline", POINTL),
("ptlAspect", POINTL),
("ptlCaret", POINTL),
("rclFontBox", RECTL),
("achVendId", ctypes.c_ubyte * 4),
("cKerningPairs", wintypes.DWORD),
("ulPanoseCulture", wintypes.DWORD),
("panose", PANOSE),
]#[repr(C)]
pub struct POINTL {
pub x: i32,
pub y: i32,
}
#[repr(C)]
pub struct RECTL {
pub left: i32,
pub top: i32,
pub right: i32,
pub bottom: i32,
}
#[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,
}
#[repr(C)]
pub struct IFIMETRICS {
pub cjThis: u32,
pub cjIfiExtra: u32,
pub dpwszFamilyName: i32,
pub dpwszStyleName: i32,
pub dpwszFaceName: i32,
pub dpwszUniqueName: i32,
pub dpFontSim: i32,
pub lEmbedId: i32,
pub lItalicAngle: i32,
pub lCharBias: i32,
pub dpCharSets: i32,
pub jWinCharSet: u8,
pub jWinPitchAndFamily: u8,
pub usWinWeight: u16,
pub flInfo: u32,
pub fsSelection: u16,
pub fsType: u16,
pub fwdUnitsPerEm: i16,
pub fwdLowestPPEm: i16,
pub fwdWinAscender: i16,
pub fwdWinDescender: i16,
pub fwdMacAscender: i16,
pub fwdMacDescender: i16,
pub fwdMacLineGap: i16,
pub fwdTypoAscender: i16,
pub fwdTypoDescender: i16,
pub fwdTypoLineGap: i16,
pub fwdAveCharWidth: i16,
pub fwdMaxCharInc: i16,
pub fwdCapHeight: i16,
pub fwdXHeight: i16,
pub fwdSubscriptXSize: i16,
pub fwdSubscriptYSize: i16,
pub fwdSubscriptXOffset: i16,
pub fwdSubscriptYOffset: i16,
pub fwdSuperscriptXSize: i16,
pub fwdSuperscriptYSize: i16,
pub fwdSuperscriptXOffset: i16,
pub fwdSuperscriptYOffset: i16,
pub fwdUnderscoreSize: i16,
pub fwdUnderscorePosition: i16,
pub fwdStrikeoutSize: i16,
pub fwdStrikeoutPosition: i16,
pub chFirstChar: u8,
pub chLastChar: u8,
pub chDefaultChar: u8,
pub chBreakChar: u8,
pub wcFirstChar: u16,
pub wcLastChar: u16,
pub wcDefaultChar: u16,
pub wcBreakChar: u16,
pub ptlBaseline: POINTL,
pub ptlAspect: POINTL,
pub ptlCaret: POINTL,
pub rclFontBox: RECTL,
pub achVendId: [u8; 4],
pub cKerningPairs: u32,
pub ulPanoseCulture: u32,
pub panose: PANOSE,
}import "golang.org/x/sys/windows"
type POINTL struct {
x int32
y int32
}
type RECTL struct {
left int32
top int32
right int32
bottom int32
}
type PANOSE struct {
bFamilyType byte
bSerifStyle byte
bWeight byte
bProportion byte
bContrast byte
bStrokeVariation byte
bArmStyle byte
bLetterform byte
bMidline byte
bXHeight byte
}
type IFIMETRICS struct {
cjThis uint32
cjIfiExtra uint32
dpwszFamilyName int32
dpwszStyleName int32
dpwszFaceName int32
dpwszUniqueName int32
dpFontSim int32
lEmbedId int32
lItalicAngle int32
lCharBias int32
dpCharSets int32
jWinCharSet byte
jWinPitchAndFamily byte
usWinWeight uint16
flInfo uint32
fsSelection uint16
fsType uint16
fwdUnitsPerEm int16
fwdLowestPPEm int16
fwdWinAscender int16
fwdWinDescender int16
fwdMacAscender int16
fwdMacDescender int16
fwdMacLineGap int16
fwdTypoAscender int16
fwdTypoDescender int16
fwdTypoLineGap int16
fwdAveCharWidth int16
fwdMaxCharInc int16
fwdCapHeight int16
fwdXHeight int16
fwdSubscriptXSize int16
fwdSubscriptYSize int16
fwdSubscriptXOffset int16
fwdSubscriptYOffset int16
fwdSuperscriptXSize int16
fwdSuperscriptYSize int16
fwdSuperscriptXOffset int16
fwdSuperscriptYOffset int16
fwdUnderscoreSize int16
fwdUnderscorePosition int16
fwdStrikeoutSize int16
fwdStrikeoutPosition int16
chFirstChar byte
chLastChar byte
chDefaultChar byte
chBreakChar byte
wcFirstChar uint16
wcLastChar uint16
wcDefaultChar uint16
wcBreakChar uint16
ptlBaseline POINTL
ptlAspect POINTL
ptlCaret POINTL
rclFontBox RECTL
achVendId [4]byte
cKerningPairs uint32
ulPanoseCulture uint32
panose PANOSE
}type
POINTL = record
x: Integer;
y: Integer;
end;
RECTL = record
left: Integer;
top: Integer;
right: Integer;
bottom: Integer;
end;
PANOSE = record
bFamilyType: Byte;
bSerifStyle: Byte;
bWeight: Byte;
bProportion: Byte;
bContrast: Byte;
bStrokeVariation: Byte;
bArmStyle: Byte;
bLetterform: Byte;
bMidline: Byte;
bXHeight: Byte;
end;
IFIMETRICS = record
cjThis: DWORD;
cjIfiExtra: DWORD;
dpwszFamilyName: Integer;
dpwszStyleName: Integer;
dpwszFaceName: Integer;
dpwszUniqueName: Integer;
dpFontSim: Integer;
lEmbedId: Integer;
lItalicAngle: Integer;
lCharBias: Integer;
dpCharSets: Integer;
jWinCharSet: Byte;
jWinPitchAndFamily: Byte;
usWinWeight: Word;
flInfo: DWORD;
fsSelection: Word;
fsType: Word;
fwdUnitsPerEm: Smallint;
fwdLowestPPEm: Smallint;
fwdWinAscender: Smallint;
fwdWinDescender: Smallint;
fwdMacAscender: Smallint;
fwdMacDescender: Smallint;
fwdMacLineGap: Smallint;
fwdTypoAscender: Smallint;
fwdTypoDescender: Smallint;
fwdTypoLineGap: Smallint;
fwdAveCharWidth: Smallint;
fwdMaxCharInc: Smallint;
fwdCapHeight: Smallint;
fwdXHeight: Smallint;
fwdSubscriptXSize: Smallint;
fwdSubscriptYSize: Smallint;
fwdSubscriptXOffset: Smallint;
fwdSubscriptYOffset: Smallint;
fwdSuperscriptXSize: Smallint;
fwdSuperscriptYSize: Smallint;
fwdSuperscriptXOffset: Smallint;
fwdSuperscriptYOffset: Smallint;
fwdUnderscoreSize: Smallint;
fwdUnderscorePosition: Smallint;
fwdStrikeoutSize: Smallint;
fwdStrikeoutPosition: Smallint;
chFirstChar: Byte;
chLastChar: Byte;
chDefaultChar: Byte;
chBreakChar: Byte;
wcFirstChar: WideChar;
wcLastChar: WideChar;
wcDefaultChar: WideChar;
wcBreakChar: WideChar;
ptlBaseline: POINTL;
ptlAspect: POINTL;
ptlCaret: POINTL;
rclFontBox: RECTL;
achVendId: array[0..3] of Byte;
cKerningPairs: DWORD;
ulPanoseCulture: DWORD;
panose: PANOSE;
end;const POINTL = extern struct {
x: i32,
y: i32,
};
const RECTL = extern struct {
left: i32,
top: i32,
right: i32,
bottom: i32,
};
const PANOSE = extern struct {
bFamilyType: u8,
bSerifStyle: u8,
bWeight: u8,
bProportion: u8,
bContrast: u8,
bStrokeVariation: u8,
bArmStyle: u8,
bLetterform: u8,
bMidline: u8,
bXHeight: u8,
};
const IFIMETRICS = extern struct {
cjThis: u32,
cjIfiExtra: u32,
dpwszFamilyName: i32,
dpwszStyleName: i32,
dpwszFaceName: i32,
dpwszUniqueName: i32,
dpFontSim: i32,
lEmbedId: i32,
lItalicAngle: i32,
lCharBias: i32,
dpCharSets: i32,
jWinCharSet: u8,
jWinPitchAndFamily: u8,
usWinWeight: u16,
flInfo: u32,
fsSelection: u16,
fsType: u16,
fwdUnitsPerEm: i16,
fwdLowestPPEm: i16,
fwdWinAscender: i16,
fwdWinDescender: i16,
fwdMacAscender: i16,
fwdMacDescender: i16,
fwdMacLineGap: i16,
fwdTypoAscender: i16,
fwdTypoDescender: i16,
fwdTypoLineGap: i16,
fwdAveCharWidth: i16,
fwdMaxCharInc: i16,
fwdCapHeight: i16,
fwdXHeight: i16,
fwdSubscriptXSize: i16,
fwdSubscriptYSize: i16,
fwdSubscriptXOffset: i16,
fwdSubscriptYOffset: i16,
fwdSuperscriptXSize: i16,
fwdSuperscriptYSize: i16,
fwdSuperscriptXOffset: i16,
fwdSuperscriptYOffset: i16,
fwdUnderscoreSize: i16,
fwdUnderscorePosition: i16,
fwdStrikeoutSize: i16,
fwdStrikeoutPosition: i16,
chFirstChar: u8,
chLastChar: u8,
chDefaultChar: u8,
chBreakChar: u8,
wcFirstChar: u16,
wcLastChar: u16,
wcDefaultChar: u16,
wcBreakChar: u16,
ptlBaseline: POINTL,
ptlAspect: POINTL,
ptlCaret: POINTL,
rclFontBox: RECTL,
achVendId: [4]u8,
cKerningPairs: u32,
ulPanoseCulture: u32,
panose: PANOSE,
};type
POINTL {.bycopy.} = object
x: int32
y: int32
RECTL {.bycopy.} = object
left: int32
top: int32
right: int32
bottom: int32
PANOSE {.bycopy.} = object
bFamilyType: uint8
bSerifStyle: uint8
bWeight: uint8
bProportion: uint8
bContrast: uint8
bStrokeVariation: uint8
bArmStyle: uint8
bLetterform: uint8
bMidline: uint8
bXHeight: uint8
IFIMETRICS {.bycopy.} = object
cjThis: uint32
cjIfiExtra: uint32
dpwszFamilyName: int32
dpwszStyleName: int32
dpwszFaceName: int32
dpwszUniqueName: int32
dpFontSim: int32
lEmbedId: int32
lItalicAngle: int32
lCharBias: int32
dpCharSets: int32
jWinCharSet: uint8
jWinPitchAndFamily: uint8
usWinWeight: uint16
flInfo: uint32
fsSelection: uint16
fsType: uint16
fwdUnitsPerEm: int16
fwdLowestPPEm: int16
fwdWinAscender: int16
fwdWinDescender: int16
fwdMacAscender: int16
fwdMacDescender: int16
fwdMacLineGap: int16
fwdTypoAscender: int16
fwdTypoDescender: int16
fwdTypoLineGap: int16
fwdAveCharWidth: int16
fwdMaxCharInc: int16
fwdCapHeight: int16
fwdXHeight: int16
fwdSubscriptXSize: int16
fwdSubscriptYSize: int16
fwdSubscriptXOffset: int16
fwdSubscriptYOffset: int16
fwdSuperscriptXSize: int16
fwdSuperscriptYSize: int16
fwdSuperscriptXOffset: int16
fwdSuperscriptYOffset: int16
fwdUnderscoreSize: int16
fwdUnderscorePosition: int16
fwdStrikeoutSize: int16
fwdStrikeoutPosition: int16
chFirstChar: uint8
chLastChar: uint8
chDefaultChar: uint8
chBreakChar: uint8
wcFirstChar: uint16
wcLastChar: uint16
wcDefaultChar: uint16
wcBreakChar: uint16
ptlBaseline: POINTL
ptlAspect: POINTL
ptlCaret: POINTL
rclFontBox: RECTL
achVendId: array[4, uint8]
cKerningPairs: uint32
ulPanoseCulture: uint32
panose: PANOSEstruct POINTL
{
int x;
int y;
}
struct RECTL
{
int left;
int top;
int right;
int bottom;
}
struct PANOSE
{
ubyte bFamilyType;
ubyte bSerifStyle;
ubyte bWeight;
ubyte bProportion;
ubyte bContrast;
ubyte bStrokeVariation;
ubyte bArmStyle;
ubyte bLetterform;
ubyte bMidline;
ubyte bXHeight;
}
struct IFIMETRICS
{
uint cjThis;
uint cjIfiExtra;
int dpwszFamilyName;
int dpwszStyleName;
int dpwszFaceName;
int dpwszUniqueName;
int dpFontSim;
int lEmbedId;
int lItalicAngle;
int lCharBias;
int dpCharSets;
ubyte jWinCharSet;
ubyte jWinPitchAndFamily;
ushort usWinWeight;
uint flInfo;
ushort fsSelection;
ushort fsType;
short fwdUnitsPerEm;
short fwdLowestPPEm;
short fwdWinAscender;
short fwdWinDescender;
short fwdMacAscender;
short fwdMacDescender;
short fwdMacLineGap;
short fwdTypoAscender;
short fwdTypoDescender;
short fwdTypoLineGap;
short fwdAveCharWidth;
short fwdMaxCharInc;
short fwdCapHeight;
short fwdXHeight;
short fwdSubscriptXSize;
short fwdSubscriptYSize;
short fwdSubscriptXOffset;
short fwdSubscriptYOffset;
short fwdSuperscriptXSize;
short fwdSuperscriptYSize;
short fwdSuperscriptXOffset;
short fwdSuperscriptYOffset;
short fwdUnderscoreSize;
short fwdUnderscorePosition;
short fwdStrikeoutSize;
short fwdStrikeoutPosition;
ubyte chFirstChar;
ubyte chLastChar;
ubyte chDefaultChar;
ubyte chBreakChar;
wchar wcFirstChar;
wchar wcLastChar;
wchar wcDefaultChar;
wchar wcBreakChar;
POINTL ptlBaseline;
POINTL ptlAspect;
POINTL ptlCaret;
RECTL rclFontBox;
ubyte[4] achVendId;
uint cKerningPairs;
uint ulPanoseCulture;
PANOSE panose;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; IFIMETRICS サイズ: 184 バイト(x64)
dim st, 46 ; 4byte整数×46(構造体サイズ 184 / 4 切り上げ)
; cjThis : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; cjIfiExtra : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dpwszFamilyName : INT (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; dpwszStyleName : INT (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; dpwszFaceName : INT (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; dpwszUniqueName : INT (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; dpFontSim : INT (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; lEmbedId : INT (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; lItalicAngle : INT (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; lCharBias : INT (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; dpCharSets : INT (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; jWinCharSet : BYTE (+44, 1byte) poke st,44,値 / 値 = peek(st,44)
; jWinPitchAndFamily : BYTE (+45, 1byte) poke st,45,値 / 値 = peek(st,45)
; usWinWeight : WORD (+46, 2byte) wpoke st,46,値 / 値 = wpeek(st,46)
; flInfo : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; fsSelection : WORD (+52, 2byte) wpoke st,52,値 / 値 = wpeek(st,52)
; fsType : WORD (+54, 2byte) wpoke st,54,値 / 値 = wpeek(st,54)
; fwdUnitsPerEm : SHORT (+56, 2byte) wpoke st,56,値 / 値 = wpeek(st,56)
; fwdLowestPPEm : SHORT (+58, 2byte) wpoke st,58,値 / 値 = wpeek(st,58)
; fwdWinAscender : SHORT (+60, 2byte) wpoke st,60,値 / 値 = wpeek(st,60)
; fwdWinDescender : SHORT (+62, 2byte) wpoke st,62,値 / 値 = wpeek(st,62)
; fwdMacAscender : SHORT (+64, 2byte) wpoke st,64,値 / 値 = wpeek(st,64)
; fwdMacDescender : SHORT (+66, 2byte) wpoke st,66,値 / 値 = wpeek(st,66)
; fwdMacLineGap : SHORT (+68, 2byte) wpoke st,68,値 / 値 = wpeek(st,68)
; fwdTypoAscender : SHORT (+70, 2byte) wpoke st,70,値 / 値 = wpeek(st,70)
; fwdTypoDescender : SHORT (+72, 2byte) wpoke st,72,値 / 値 = wpeek(st,72)
; fwdTypoLineGap : SHORT (+74, 2byte) wpoke st,74,値 / 値 = wpeek(st,74)
; fwdAveCharWidth : SHORT (+76, 2byte) wpoke st,76,値 / 値 = wpeek(st,76)
; fwdMaxCharInc : SHORT (+78, 2byte) wpoke st,78,値 / 値 = wpeek(st,78)
; fwdCapHeight : SHORT (+80, 2byte) wpoke st,80,値 / 値 = wpeek(st,80)
; fwdXHeight : SHORT (+82, 2byte) wpoke st,82,値 / 値 = wpeek(st,82)
; fwdSubscriptXSize : SHORT (+84, 2byte) wpoke st,84,値 / 値 = wpeek(st,84)
; fwdSubscriptYSize : SHORT (+86, 2byte) wpoke st,86,値 / 値 = wpeek(st,86)
; fwdSubscriptXOffset : SHORT (+88, 2byte) wpoke st,88,値 / 値 = wpeek(st,88)
; fwdSubscriptYOffset : SHORT (+90, 2byte) wpoke st,90,値 / 値 = wpeek(st,90)
; fwdSuperscriptXSize : SHORT (+92, 2byte) wpoke st,92,値 / 値 = wpeek(st,92)
; fwdSuperscriptYSize : SHORT (+94, 2byte) wpoke st,94,値 / 値 = wpeek(st,94)
; fwdSuperscriptXOffset : SHORT (+96, 2byte) wpoke st,96,値 / 値 = wpeek(st,96)
; fwdSuperscriptYOffset : SHORT (+98, 2byte) wpoke st,98,値 / 値 = wpeek(st,98)
; fwdUnderscoreSize : SHORT (+100, 2byte) wpoke st,100,値 / 値 = wpeek(st,100)
; fwdUnderscorePosition : SHORT (+102, 2byte) wpoke st,102,値 / 値 = wpeek(st,102)
; fwdStrikeoutSize : SHORT (+104, 2byte) wpoke st,104,値 / 値 = wpeek(st,104)
; fwdStrikeoutPosition : SHORT (+106, 2byte) wpoke st,106,値 / 値 = wpeek(st,106)
; chFirstChar : BYTE (+108, 1byte) poke st,108,値 / 値 = peek(st,108)
; chLastChar : BYTE (+109, 1byte) poke st,109,値 / 値 = peek(st,109)
; chDefaultChar : BYTE (+110, 1byte) poke st,110,値 / 値 = peek(st,110)
; chBreakChar : BYTE (+111, 1byte) poke st,111,値 / 値 = peek(st,111)
; wcFirstChar : WCHAR (+112, 2byte) wpoke st,112,値 / 値 = wpeek(st,112)
; wcLastChar : WCHAR (+114, 2byte) wpoke st,114,値 / 値 = wpeek(st,114)
; wcDefaultChar : WCHAR (+116, 2byte) wpoke st,116,値 / 値 = wpeek(st,116)
; wcBreakChar : WCHAR (+118, 2byte) wpoke st,118,値 / 値 = wpeek(st,118)
; ptlBaseline : POINTL (+120, 8byte) varptr(st)+120 を基点に操作(8byte:入れ子/配列)
; ptlAspect : POINTL (+128, 8byte) varptr(st)+128 を基点に操作(8byte:入れ子/配列)
; ptlCaret : POINTL (+136, 8byte) varptr(st)+136 を基点に操作(8byte:入れ子/配列)
; rclFontBox : RECTL (+144, 16byte) varptr(st)+144 を基点に操作(16byte:入れ子/配列)
; achVendId : BYTE (+160, 4byte) varptr(st)+160 を基点に操作(4byte:入れ子/配列)
; cKerningPairs : DWORD (+164, 4byte) st.41 = 値 / 値 = st.41 (lpoke/lpeek も可)
; ulPanoseCulture : DWORD (+168, 4byte) st.42 = 値 / 値 = st.42 (lpoke/lpeek も可)
; panose : PANOSE (+172, 10byte) varptr(st)+172 を基点に操作(10byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global POINTL
#field int x
#field int y
#endstruct
#defstruct global RECTL
#field int left
#field int top
#field int right
#field int bottom
#endstruct
#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
#defstruct global IFIMETRICS
#field int cjThis
#field int cjIfiExtra
#field int dpwszFamilyName
#field int dpwszStyleName
#field int dpwszFaceName
#field int dpwszUniqueName
#field int dpFontSim
#field int lEmbedId
#field int lItalicAngle
#field int lCharBias
#field int dpCharSets
#field byte jWinCharSet
#field byte jWinPitchAndFamily
#field short usWinWeight
#field int flInfo
#field short fsSelection
#field short fsType
#field short fwdUnitsPerEm
#field short fwdLowestPPEm
#field short fwdWinAscender
#field short fwdWinDescender
#field short fwdMacAscender
#field short fwdMacDescender
#field short fwdMacLineGap
#field short fwdTypoAscender
#field short fwdTypoDescender
#field short fwdTypoLineGap
#field short fwdAveCharWidth
#field short fwdMaxCharInc
#field short fwdCapHeight
#field short fwdXHeight
#field short fwdSubscriptXSize
#field short fwdSubscriptYSize
#field short fwdSubscriptXOffset
#field short fwdSubscriptYOffset
#field short fwdSuperscriptXSize
#field short fwdSuperscriptYSize
#field short fwdSuperscriptXOffset
#field short fwdSuperscriptYOffset
#field short fwdUnderscoreSize
#field short fwdUnderscorePosition
#field short fwdStrikeoutSize
#field short fwdStrikeoutPosition
#field byte chFirstChar
#field byte chLastChar
#field byte chDefaultChar
#field byte chBreakChar
#field short wcFirstChar
#field short wcLastChar
#field short wcDefaultChar
#field short wcBreakChar
#field POINTL ptlBaseline
#field POINTL ptlAspect
#field POINTL ptlCaret
#field RECTL rclFontBox
#field byte achVendId 4
#field int cKerningPairs
#field int ulPanoseCulture
#field PANOSE panose
#endstruct
stdim st, IFIMETRICS ; NSTRUCT 変数を確保
st->cjThis = 100
mes "cjThis=" + st->cjThis