ホーム › System.Com › FORMATETC
FORMATETC
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| cfFormat | WORD | 2 | +0 | +0 | 対象となるクリップボード形式。OLE が認識する形式には次の 3 種類があります。
|
| ptd | DVTARGETDEVICE* | 8/4 | +8 | +4 | データの生成対象となるターゲットデバイスに関する情報を格納した DVTARGETDEVICE 構造体へのポインター。指定されたデータ形式がターゲットデバイスに依存しない場合、または呼び出し元がどのデバイスを使用するかを問わない場合は NULL を指定します。後者の場合、データがターゲットデバイスを必要とするのであれば、オブジェクトは適切な既定のデバイス (視覚的なコンポーネントでは多くの場合ディスプレイ) を選択する必要があります。ほとんどのメタファイルのように、ターゲットデバイスが NULL の状態でオブジェクトから取得したデータは、ターゲットデバイスに依存しません。得られるデータは通常、ユーザーが ファイル メニューの 名前を付けて保存 コマンドを選び、交換用形式を選択した場合と同じものになります。 |
| dwAspect | DWORD | 4 | +16 | +8 | レンダリングにどの程度の詳細を含めるかを示します。このパラメーターは DVASPECT 列挙型の値のいずれかでなければなりません。1 つのクリップボード形式が、オブジェクトの複数のアスペクト (ビュー) をサポートすることがあります。データおよびプレゼンテーションの転送やキャッシュを行うメソッドのほとんどは、アスペクトの情報を受け渡します。たとえば呼び出し元は、メタファイルのクリップボード形式を使ってオブジェクトのアイコン画像を要求することができます。dwAspect に指定できる DVASPECT の値は 1 つだけである点に注意してください。つまり dwAspect には、複数の DVASPECT 値をブール OR 演算した結果を指定することはできません。 |
| lindex | INT | 4 | +20 | +12 | データをページ境界で分割する必要がある場合のアスペクトの一部です。最も一般的な値は -1 で、これはすべてのデータを示します。CFSTR_FILECONTENTS 形式では、0 から始まるインデックスを使用します。アスペクトが DVASPECT_THUMBNAIL および DVASPECT_ICON の場合、lindex は無視されます。 |
| tymed | DWORD | 4 | +24 | +16 | オブジェクトのデータの転送に使用する記憶メディアの種類を示す TYMED 列挙定数のいずれか。データは、そのオブジェクトにとって適切な任意のメディアを使って転送できます。たとえば、グローバルメモリ、ディスクファイル、構造化ストレージオブジェクトなどを使ってデータを渡すことができます。詳細については、TYMED 列挙型を参照してください。 |
公式ドキュメント
汎用化されたクリップボード形式を表します。ターゲットデバイス、データのアスペクト (ビュー)、および記憶メディアの指定子を含むように拡張されています。クリップボード形式が使われる場面において、OLE では代わりに FORMATETC データ構造体を使用します。この構造体は、データ形式の情報を必要とする OLE の関数やメソッドのパラメーターとして使用されます。
解説(Remarks)
FORMATETC 構造体は、データ転送インターフェイスおよびプレゼンテーションインターフェイスのメソッドで、転送されるデータを指定するパラメーターとして使用されます。たとえば IDataObject::GetData メソッドは、呼び出し元がどのような種類のデータを要求しているかを正確に示すために FORMATETC 構造体を使用します。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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>
// FORMATETC (x64 32 / x86 20 バイト)
typedef struct FORMATETC {
WORD cfFormat;
DVTARGETDEVICE* ptd;
DWORD dwAspect;
INT lindex;
DWORD tymed;
} FORMATETC;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FORMATETC
{
public ushort cfFormat;
public IntPtr ptd;
public uint dwAspect;
public int lindex;
public uint tymed;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FORMATETC
Public cfFormat As UShort
Public ptd As IntPtr
Public dwAspect As UInteger
Public lindex As Integer
Public tymed As UInteger
End Structureimport ctypes
from ctypes import wintypes
class FORMATETC(ctypes.Structure):
_fields_ = [
("cfFormat", ctypes.c_ushort),
("ptd", ctypes.c_void_p),
("dwAspect", wintypes.DWORD),
("lindex", ctypes.c_int),
("tymed", wintypes.DWORD),
]#[repr(C)]
pub struct FORMATETC {
pub cfFormat: u16,
pub ptd: *mut core::ffi::c_void,
pub dwAspect: u32,
pub lindex: i32,
pub tymed: u32,
}import "golang.org/x/sys/windows"
type FORMATETC struct {
cfFormat uint16
ptd uintptr
dwAspect uint32
lindex int32
tymed uint32
}type
FORMATETC = record
cfFormat: Word;
ptd: Pointer;
dwAspect: DWORD;
lindex: Integer;
tymed: DWORD;
end;const FORMATETC = extern struct {
cfFormat: u16,
ptd: ?*anyopaque,
dwAspect: u32,
lindex: i32,
tymed: u32,
};type
FORMATETC {.bycopy.} = object
cfFormat: uint16
ptd: pointer
dwAspect: uint32
lindex: int32
tymed: uint32struct FORMATETC
{
ushort cfFormat;
void* ptd;
uint dwAspect;
int lindex;
uint tymed;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; FORMATETC サイズ: 20 バイト(x86)
dim st, 5 ; 4byte整数×5(構造体サイズ 20 / 4 切り上げ)
; cfFormat : WORD (+0, 2byte) wpoke st,0,値 / 値 = wpeek(st,0)
; ptd : DVTARGETDEVICE* (+4, 4byte) varptr(st)+4 を基点に操作(4byte:入れ子/配列)
; dwAspect : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; lindex : INT (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; tymed : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; FORMATETC サイズ: 32 バイト(x64)
dim st, 8 ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; cfFormat : WORD (+0, 2byte) wpoke st,0,値 / 値 = wpeek(st,0)
; ptd : DVTARGETDEVICE* (+8, 8byte) varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; dwAspect : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; lindex : INT (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; tymed : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global FORMATETC
#field short cfFormat
#field intptr ptd
#field int dwAspect
#field int lindex
#field int tymed
#endstruct
stdim st, FORMATETC ; NSTRUCT 変数を確保
st->cfFormat = 100
mes "cfFormat=" + st->cfFormat