Win32 API 日本語リファレンス
ホームDevices.Display › FLOATOBJ_XFORM

FLOATOBJ_XFORM

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

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

フィールド

フィールドサイズx64x86説明
eM11FLOATOBJ8+0+0変換行列の(1,1)成分。FLOATまたはFLOATOBJ型で保持する。
eM12FLOATOBJ8+8+8変換行列の(1,2)成分。
eM21FLOATOBJ8+16+16変換行列の(2,1)成分。
eM22FLOATOBJ8+24+24変換行列の(2,2)成分。
eDxFLOATOBJ8+32+32X方向の平行移動量。
eDyFLOATOBJ8+40+40Y方向の平行移動量。

各言語での定義

#include <windows.h>

// FLOATOBJ  (x64 8 / x86 8 バイト)
typedef struct FLOATOBJ {
    DWORD ul1;
    DWORD ul2;
} FLOATOBJ;

// FLOATOBJ_XFORM  (x64 48 / x86 48 バイト)
typedef struct FLOATOBJ_XFORM {
    FLOATOBJ eM11;
    FLOATOBJ eM12;
    FLOATOBJ eM21;
    FLOATOBJ eM22;
    FLOATOBJ eDx;
    FLOATOBJ eDy;
} FLOATOBJ_XFORM;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FLOATOBJ
{
    public uint ul1;
    public uint ul2;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FLOATOBJ_XFORM
{
    public FLOATOBJ eM11;
    public FLOATOBJ eM12;
    public FLOATOBJ eM21;
    public FLOATOBJ eM22;
    public FLOATOBJ eDx;
    public FLOATOBJ eDy;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FLOATOBJ
    Public ul1 As UInteger
    Public ul2 As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FLOATOBJ_XFORM
    Public eM11 As FLOATOBJ
    Public eM12 As FLOATOBJ
    Public eM21 As FLOATOBJ
    Public eM22 As FLOATOBJ
    Public eDx As FLOATOBJ
    Public eDy As FLOATOBJ
End Structure
import ctypes
from ctypes import wintypes

class FLOATOBJ(ctypes.Structure):
    _fields_ = [
        ("ul1", wintypes.DWORD),
        ("ul2", wintypes.DWORD),
    ]

class FLOATOBJ_XFORM(ctypes.Structure):
    _fields_ = [
        ("eM11", FLOATOBJ),
        ("eM12", FLOATOBJ),
        ("eM21", FLOATOBJ),
        ("eM22", FLOATOBJ),
        ("eDx", FLOATOBJ),
        ("eDy", FLOATOBJ),
    ]
#[repr(C)]
pub struct FLOATOBJ {
    pub ul1: u32,
    pub ul2: u32,
}

#[repr(C)]
pub struct FLOATOBJ_XFORM {
    pub eM11: FLOATOBJ,
    pub eM12: FLOATOBJ,
    pub eM21: FLOATOBJ,
    pub eM22: FLOATOBJ,
    pub eDx: FLOATOBJ,
    pub eDy: FLOATOBJ,
}
import "golang.org/x/sys/windows"

type FLOATOBJ struct {
	ul1 uint32
	ul2 uint32
}

type FLOATOBJ_XFORM struct {
	eM11 FLOATOBJ
	eM12 FLOATOBJ
	eM21 FLOATOBJ
	eM22 FLOATOBJ
	eDx FLOATOBJ
	eDy FLOATOBJ
}
type
  FLOATOBJ = record
    ul1: DWORD;
    ul2: DWORD;
  end;

  FLOATOBJ_XFORM = record
    eM11: FLOATOBJ;
    eM12: FLOATOBJ;
    eM21: FLOATOBJ;
    eM22: FLOATOBJ;
    eDx: FLOATOBJ;
    eDy: FLOATOBJ;
  end;
const FLOATOBJ = extern struct {
    ul1: u32,
    ul2: u32,
};

const FLOATOBJ_XFORM = extern struct {
    eM11: FLOATOBJ,
    eM12: FLOATOBJ,
    eM21: FLOATOBJ,
    eM22: FLOATOBJ,
    eDx: FLOATOBJ,
    eDy: FLOATOBJ,
};
type
  FLOATOBJ {.bycopy.} = object
    ul1: uint32
    ul2: uint32

  FLOATOBJ_XFORM {.bycopy.} = object
    eM11: FLOATOBJ
    eM12: FLOATOBJ
    eM21: FLOATOBJ
    eM22: FLOATOBJ
    eDx: FLOATOBJ
    eDy: FLOATOBJ
struct FLOATOBJ
{
    uint ul1;
    uint ul2;
}

struct FLOATOBJ_XFORM
{
    FLOATOBJ eM11;
    FLOATOBJ eM12;
    FLOATOBJ eM21;
    FLOATOBJ eM22;
    FLOATOBJ eDx;
    FLOATOBJ eDy;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; FLOATOBJ_XFORM サイズ: 48 バイト(x64)
dim st, 12    ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; eM11 : FLOATOBJ (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; eM12 : FLOATOBJ (+8, 8byte)  varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; eM21 : FLOATOBJ (+16, 8byte)  varptr(st)+16 を基点に操作(8byte:入れ子/配列)
; eM22 : FLOATOBJ (+24, 8byte)  varptr(st)+24 を基点に操作(8byte:入れ子/配列)
; eDx : FLOATOBJ (+32, 8byte)  varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; eDy : FLOATOBJ (+40, 8byte)  varptr(st)+40 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global FLOATOBJ
    #field int ul1
    #field int ul2
#endstruct

#defstruct global FLOATOBJ_XFORM
    #field FLOATOBJ eM11
    #field FLOATOBJ eM12
    #field FLOATOBJ eM21
    #field FLOATOBJ eM22
    #field FLOATOBJ eDx
    #field FLOATOBJ eDy
#endstruct

stdim st, FLOATOBJ_XFORM        ; NSTRUCT 変数を確保