ホーム › Graphics.OpenGL › GLYPHMETRICSFLOAT
GLYPHMETRICSFLOAT
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| gmfBlackBoxX | FLOAT | 4 | +0 | +0 | グリフを完全に囲む最小の矩形(グリフのブラックボックス)の幅を指定します。 |
| gmfBlackBoxY | FLOAT | 4 | +4 | +4 | グリフを完全に囲む最小の矩形(グリフのブラックボックス)の高さを指定します。 |
| gmfptGlyphOrigin | POINTFLOAT | 8 | +8 | +8 | グリフを完全に囲む最小の矩形の左上隅の x 座標および y 座標を指定します。 |
| gmfCellIncX | FLOAT | 4 | +16 | +16 | 現在の文字セルの原点から次の文字セルの原点までの水平方向の距離を指定します。 |
| gmfCellIncY | FLOAT | 4 | +20 | +20 | 現在の文字セルの原点から次の文字セルの原点までの垂直方向の距離を指定します。 |
公式ドキュメント
GLYPHMETRICSFLOAT 構造体には、文字セル内におけるグリフの配置と向きに関する情報が格納されます。
解説(Remarks)
GLYPHMETRICSFLOAT の値は、想定上の単位 (notional units) で指定されます。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// POINTFLOAT (x64 8 / x86 8 バイト)
typedef struct POINTFLOAT {
FLOAT x;
FLOAT y;
} POINTFLOAT;
// GLYPHMETRICSFLOAT (x64 24 / x86 24 バイト)
typedef struct GLYPHMETRICSFLOAT {
FLOAT gmfBlackBoxX;
FLOAT gmfBlackBoxY;
POINTFLOAT gmfptGlyphOrigin;
FLOAT gmfCellIncX;
FLOAT gmfCellIncY;
} GLYPHMETRICSFLOAT;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct POINTFLOAT
{
public float x;
public float y;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct GLYPHMETRICSFLOAT
{
public float gmfBlackBoxX;
public float gmfBlackBoxY;
public POINTFLOAT gmfptGlyphOrigin;
public float gmfCellIncX;
public float gmfCellIncY;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure POINTFLOAT
Public x As Single
Public y As Single
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure GLYPHMETRICSFLOAT
Public gmfBlackBoxX As Single
Public gmfBlackBoxY As Single
Public gmfptGlyphOrigin As POINTFLOAT
Public gmfCellIncX As Single
Public gmfCellIncY As Single
End Structureimport ctypes
from ctypes import wintypes
class POINTFLOAT(ctypes.Structure):
_fields_ = [
("x", ctypes.c_float),
("y", ctypes.c_float),
]
class GLYPHMETRICSFLOAT(ctypes.Structure):
_fields_ = [
("gmfBlackBoxX", ctypes.c_float),
("gmfBlackBoxY", ctypes.c_float),
("gmfptGlyphOrigin", POINTFLOAT),
("gmfCellIncX", ctypes.c_float),
("gmfCellIncY", ctypes.c_float),
]#[repr(C)]
pub struct POINTFLOAT {
pub x: f32,
pub y: f32,
}
#[repr(C)]
pub struct GLYPHMETRICSFLOAT {
pub gmfBlackBoxX: f32,
pub gmfBlackBoxY: f32,
pub gmfptGlyphOrigin: POINTFLOAT,
pub gmfCellIncX: f32,
pub gmfCellIncY: f32,
}import "golang.org/x/sys/windows"
type POINTFLOAT struct {
x float32
y float32
}
type GLYPHMETRICSFLOAT struct {
gmfBlackBoxX float32
gmfBlackBoxY float32
gmfptGlyphOrigin POINTFLOAT
gmfCellIncX float32
gmfCellIncY float32
}type
POINTFLOAT = record
x: Single;
y: Single;
end;
GLYPHMETRICSFLOAT = record
gmfBlackBoxX: Single;
gmfBlackBoxY: Single;
gmfptGlyphOrigin: POINTFLOAT;
gmfCellIncX: Single;
gmfCellIncY: Single;
end;const POINTFLOAT = extern struct {
x: f32,
y: f32,
};
const GLYPHMETRICSFLOAT = extern struct {
gmfBlackBoxX: f32,
gmfBlackBoxY: f32,
gmfptGlyphOrigin: POINTFLOAT,
gmfCellIncX: f32,
gmfCellIncY: f32,
};type
POINTFLOAT {.bycopy.} = object
x: float32
y: float32
GLYPHMETRICSFLOAT {.bycopy.} = object
gmfBlackBoxX: float32
gmfBlackBoxY: float32
gmfptGlyphOrigin: POINTFLOAT
gmfCellIncX: float32
gmfCellIncY: float32struct POINTFLOAT
{
float x;
float y;
}
struct GLYPHMETRICSFLOAT
{
float gmfBlackBoxX;
float gmfBlackBoxY;
POINTFLOAT gmfptGlyphOrigin;
float gmfCellIncX;
float gmfCellIncY;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; GLYPHMETRICSFLOAT サイズ: 24 バイト(x64)
dim st, 6 ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; gmfBlackBoxX : FLOAT (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; gmfBlackBoxY : FLOAT (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; gmfptGlyphOrigin : POINTFLOAT (+8, 8byte) varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; gmfCellIncX : FLOAT (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; gmfCellIncY : FLOAT (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global POINTFLOAT
#field float x
#field float y
#endstruct
#defstruct global GLYPHMETRICSFLOAT
#field float gmfBlackBoxX
#field float gmfBlackBoxY
#field POINTFLOAT gmfptGlyphOrigin
#field float gmfCellIncX
#field float gmfCellIncY
#endstruct
stdim st, GLYPHMETRICSFLOAT ; NSTRUCT 変数を確保
st->gmfBlackBoxX = 100
mes "gmfBlackBoxX=" + st->gmfBlackBoxX