ホーム › 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 | グリフ原点(黒ボックス左上)の座標を示すPOINTFLOAT。 |
| gmfCellIncX | FLOAT | 4 | +16 | +16 | 次のグリフへ進む水平方向の文字送り量。 |
| gmfCellIncY | FLOAT | 4 | +20 | +20 | 次のグリフへ進む垂直方向の文字送り量。 |
各言語での定義
#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