Win32 API 日本語リファレンス
ホームUI.Controls.RichEdit › REOBJECT

REOBJECT

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

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

フィールド

フィールドサイズx64x86説明
cbStructDWORD4+0+0構造体のサイズ (バイト単位)。
cpINT4+4+4オブジェクトの文字位置。
clsidGUID16+8+8オブジェクトのクラス識別子。
poleobjIOleObject*8/4+24+24オブジェクトの IOleObject インターフェイスのインスタンス。
pstgIStorage*8/4+32+28IStorage インターフェイスのインスタンス。これは、オブジェクトに関連付けられたストレージオブジェクトです。
polesiteIOleClientSite*8/4+40+32IOleClientSite インターフェイスのインスタンス。これは、リッチエディットコントロール内でのオブジェクトのクライアントサイトです。このアドレスは GetClientSite メソッドから取得したものでなければなりません。
sizelSIZE8+48+36オブジェクトのサイズ。単位は 0.01 ミリメートルで、これは HIMETRIC 単位です。詳細については、関数 GetMapMode を参照してください。挿入時に 0, 0 を指定すると、変更フラグがオフになるまでオブジェクトが自身のサイズを自由に決定できることを示します。
dvaspectDWORD4+56+44使用される表示アスペクト。指定できる値の説明については、DVASPECT を参照してください。
dwFlagsREOBJECT_FLAGS4+60+48

オブジェクトの状態フラグ。次の値の組み合わせを指定できます。

意味
REO_ALIGNTORIGHT
オブジェクトをビューの右端に揃えます。REO_WRAPTEXTAROUND が指定されていない場合、この値は無視されます。
REO_BELOWBASELINE
オブジェクトは周囲のテキストのベースラインより下に配置されます。既定ではベースライン上に配置されます。
REO_BLANK
オブジェクトは新規です。この値により、オブジェクトは何も保存せずにコントロールから自動的に削除される機会が与えられます。
REO_CANROTATE
オブジェクトは回転した状態で自身を表示できます。
REO_DONTNEEDPALETTE
オブジェクトはハーフトーンパレットの作成と実現の前に描画されます。32 ビットプラットフォームにのみ適用されます。
REO_DYNAMICSIZE
オブジェクトは常に自身の範囲を決定し、変更フラグがオフであっても変化する可能性があります。
REO_GETMETAFILE
リッチエディットコントロールは、オブジェクトの範囲を正しく決定するために、オブジェクトからメタファイルを取得しました。このフラグは読み取ることはできますが、設定はできません。
REO_HILITED
オブジェクトは選択されていることを示すために現在強調表示されています。コントロールにフォーカスがあり、REO_SELECTED が設定されている場合に発生します。このフラグは読み取ることはできますが、設定はできません。
REO_INPLACEACTIVE
オブジェクトは現在インプレースアクティブです。このフラグは読み取ることはできますが、設定はできません。
REO_INVERTEDSELECT
選択時にオブジェクト全体を反転して描画します。既定では境界線付きで描画されます。
REO_LINK
オブジェクトはリンクです。このフラグは読み取ることはできますが、設定はできません。
REO_LINKAVAILABLE
オブジェクトはリンクであり、利用可能であると考えられます。このフラグは読み取ることはできますが、設定はできません。
REO_OPEN
オブジェクトは現在サーバー内で開かれています。このフラグは読み取ることはできますが、設定はできません。
REO_OWNERDRAWSELECT
選択されたオブジェクトはオーナーが描画します。
REO_RESIZABLE
オブジェクトはサイズ変更できます。
REO_SELECTED
オブジェクトはリッチエディットコントロール内で現在選択されています。このフラグは読み取ることはできますが、設定はできません。
REO_STATIC
オブジェクトは静的オブジェクトです。このフラグは読み取ることはできますが、設定はできません。
REO_USEASBACKGROUND
オブジェクトを背景画像として使用します。
REO_WRAPTEXTAROUND
オブジェクトの周囲にテキストを回り込ませます。
dwUserDWORD4+64+52ユーザー定義の値のために予約されています。

公式ドキュメント

リッチエディットコントロール内の OLE オブジェクトまたはイメージオブジェクトに関する情報を格納します。

解説(Remarks)

リッチエディットコントロール内の OLE オブジェクトまたはイメージオブジェクトは、メモリ内バッキングストアのプレーンテキスト部分で 1 文字分の位置を占め、その値は U+FFFC になります。これらは、数式オブジェクトのような「インラインオブジェクト」とは異なります。インラインオブジェクトは、インラインオブジェクトの開始区切り文字 (U+FDD0) と終了区切り文字 (U+FDEF) を持つため、少なくとも 2 文字分の位置を占めます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// SIZE  (x64 8 / x86 8 バイト)
typedef struct SIZE {
    INT cx;
    INT cy;
} SIZE;

// REOBJECT  (x64 72 / x86 56 バイト)
typedef struct REOBJECT {
    DWORD cbStruct;
    INT cp;
    GUID clsid;
    IOleObject* poleobj;
    IStorage* pstg;
    IOleClientSite* polesite;
    SIZE sizel;
    DWORD dvaspect;
    REOBJECT_FLAGS dwFlags;
    DWORD dwUser;
} REOBJECT;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SIZE
{
    public int cx;
    public int cy;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct REOBJECT
{
    public uint cbStruct;
    public int cp;
    public Guid clsid;
    public IntPtr poleobj;
    public IntPtr pstg;
    public IntPtr polesite;
    public SIZE sizel;
    public uint dvaspect;
    public uint dwFlags;
    public uint dwUser;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SIZE
    Public cx As Integer
    Public cy As Integer
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure REOBJECT
    Public cbStruct As UInteger
    Public cp As Integer
    Public clsid As Guid
    Public poleobj As IntPtr
    Public pstg As IntPtr
    Public polesite As IntPtr
    Public sizel As SIZE
    Public dvaspect As UInteger
    Public dwFlags As UInteger
    Public dwUser As UInteger
End Structure
import ctypes
from ctypes import wintypes

class SIZE(ctypes.Structure):
    _fields_ = [
        ("cx", ctypes.c_int),
        ("cy", ctypes.c_int),
    ]

class REOBJECT(ctypes.Structure):
    _fields_ = [
        ("cbStruct", wintypes.DWORD),
        ("cp", ctypes.c_int),
        ("clsid", GUID),
        ("poleobj", ctypes.c_void_p),
        ("pstg", ctypes.c_void_p),
        ("polesite", ctypes.c_void_p),
        ("sizel", SIZE),
        ("dvaspect", wintypes.DWORD),
        ("dwFlags", wintypes.DWORD),
        ("dwUser", wintypes.DWORD),
    ]
#[repr(C)]
pub struct SIZE {
    pub cx: i32,
    pub cy: i32,
}

#[repr(C)]
pub struct REOBJECT {
    pub cbStruct: u32,
    pub cp: i32,
    pub clsid: GUID,
    pub poleobj: *mut core::ffi::c_void,
    pub pstg: *mut core::ffi::c_void,
    pub polesite: *mut core::ffi::c_void,
    pub sizel: SIZE,
    pub dvaspect: u32,
    pub dwFlags: u32,
    pub dwUser: u32,
}
import "golang.org/x/sys/windows"

type SIZE struct {
	cx int32
	cy int32
}

type REOBJECT struct {
	cbStruct uint32
	cp int32
	clsid windows.GUID
	poleobj uintptr
	pstg uintptr
	polesite uintptr
	sizel SIZE
	dvaspect uint32
	dwFlags uint32
	dwUser uint32
}
type
  SIZE = record
    cx: Integer;
    cy: Integer;
  end;

  REOBJECT = record
    cbStruct: DWORD;
    cp: Integer;
    clsid: TGUID;
    poleobj: Pointer;
    pstg: Pointer;
    polesite: Pointer;
    sizel: SIZE;
    dvaspect: DWORD;
    dwFlags: DWORD;
    dwUser: DWORD;
  end;
const SIZE = extern struct {
    cx: i32,
    cy: i32,
};

const REOBJECT = extern struct {
    cbStruct: u32,
    cp: i32,
    clsid: GUID,
    poleobj: ?*anyopaque,
    pstg: ?*anyopaque,
    polesite: ?*anyopaque,
    sizel: SIZE,
    dvaspect: u32,
    dwFlags: u32,
    dwUser: u32,
};
type
  SIZE {.bycopy.} = object
    cx: int32
    cy: int32

  REOBJECT {.bycopy.} = object
    cbStruct: uint32
    cp: int32
    clsid: GUID
    poleobj: pointer
    pstg: pointer
    polesite: pointer
    sizel: SIZE
    dvaspect: uint32
    dwFlags: uint32
    dwUser: uint32
struct SIZE
{
    int cx;
    int cy;
}

struct REOBJECT
{
    uint cbStruct;
    int cp;
    GUID clsid;
    void* poleobj;
    void* pstg;
    void* polesite;
    SIZE sizel;
    uint dvaspect;
    uint dwFlags;
    uint dwUser;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; REOBJECT サイズ: 56 バイト(x86)
dim st, 14    ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; cbStruct : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; cp : INT (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; clsid : GUID (+8, 16byte)  varptr(st)+8 を基点に操作(16byte:入れ子/配列)
; poleobj : IOleObject* (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; pstg : IStorage* (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; polesite : IOleClientSite* (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; sizel : SIZE (+36, 8byte)  varptr(st)+36 を基点に操作(8byte:入れ子/配列)
; dvaspect : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; dwFlags : REOBJECT_FLAGS (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; dwUser : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; REOBJECT サイズ: 72 バイト(x64)
dim st, 18    ; 4byte整数×18(構造体サイズ 72 / 4 切り上げ)
; cbStruct : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; cp : INT (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; clsid : GUID (+8, 16byte)  varptr(st)+8 を基点に操作(16byte:入れ子/配列)
; poleobj : IOleObject* (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; pstg : IStorage* (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; polesite : IOleClientSite* (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; sizel : SIZE (+48, 8byte)  varptr(st)+48 を基点に操作(8byte:入れ子/配列)
; dvaspect : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; dwFlags : REOBJECT_FLAGS (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; dwUser : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global SIZE
    #field int cx
    #field int cy
#endstruct

#defstruct global REOBJECT
    #field int cbStruct
    #field int cp
    #field GUID clsid
    #field intptr poleobj
    #field intptr pstg
    #field intptr polesite
    #field SIZE sizel
    #field int dvaspect
    #field int dwFlags
    #field int dwUser
#endstruct

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