Win32 API 日本語リファレンス
ホームGraphics.DirectDraw › DDRAWI_DIRECTDRAW_LCL

DDRAWI_DIRECTDRAW_LCL

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

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

フィールド

フィールドサイズx64x86説明
lpDDMoreDWORD4+0+0追加ローカル情報へのポインタ(予約)を示す。
lpGblDDRAWI_DIRECTDRAW_GBL*8/4+8+4対応するグローバルDirectDrawオブジェクトへのポインタ。
dwUnused0DWORD4+16+8未使用の予約フィールド。
dwLocalFlagsDWORD4+20+12ローカルDirectDrawオブジェクトの属性フラグを示す。
dwLocalRefCntDWORD4+24+16ローカルオブジェクトの参照カウントを示す。
dwProcessIdDWORD4+28+20このオブジェクトを所有するプロセスの識別子を示す。
pUnkOuterIUnknown*8/4+32+24アグリゲーション時の外部IUnknownへのポインタ。NULL可。
dwObsolete1DWORD4+40+28廃止された予約フィールドを示す。
hWndUINT_PTR8/4+48+32協調レベル設定に用いたウィンドウハンドルを示す。
hDCUINT_PTR8/4+56+36関連付けられたデバイスコンテキストハンドルを示す。
dwErrorModeDWORD4+64+40ドライバ呼び出し時のエラーモードを示す。
lpPrimaryDDRAWI_DDRAWSURFACE_INT*8/4+72+44プライマリサーフェスのインターフェイスへのポインタ。NULL可。
lpCBDDRAWI_DDRAWSURFACE_INT*8/4+80+48現在のバックバッファサーフェスへのポインタを示す。NULL可。
dwPreferredModeDWORD4+88+52優先するディスプレイモードのインデックスを示す。
hD3DInstanceHINSTANCE8/4+96+56Direct3DドライバDLLのインスタンスハンドルを示す。
pD3DIUnknownIUnknown*8/4+104+60Direct3DオブジェクトのIUnknownへのポインタ。NULL可。
lpDDCBDDHAL_CALLBACKS*8/4+112+64このオブジェクト用のHALコールバック群へのポインタ。
hDDVxdUINT_PTR8/4+120+68DirectDraw VxDのハンドルを示す。
dwAppHackFlagsDWORD4+128+72アプリ互換のための回避フラグを示す。
hFocusWndUINT_PTR8/4+136+76フォーカスウィンドウのハンドルを示す。
dwHotTrackingDWORD4+144+80ホットトラッキング状態を示す値。
dwIMEStateDWORD4+148+84IME(入力メソッド)の状態を示す。
hWndPopupUINT_PTR8/4+152+88ポップアップウィンドウのハンドルを示す。
hDDUINT_PTR8/4+160+92ドライバが用いるDirectDrawハンドルを示す。
hGammaCalibratorUINT_PTR8/4+168+96ガンマ較正器モジュールのハンドルを示す。
lpGammaCalibratorLPDDGAMMACALIBRATORPROC8/4+176+100ガンマ較正コールバック関数へのポインタを示す。

各言語での定義

#include <windows.h>

// DDRAWI_DIRECTDRAW_LCL  (x64 184 / x86 104 バイト)
typedef struct DDRAWI_DIRECTDRAW_LCL {
    DWORD lpDDMore;
    DDRAWI_DIRECTDRAW_GBL* lpGbl;
    DWORD dwUnused0;
    DWORD dwLocalFlags;
    DWORD dwLocalRefCnt;
    DWORD dwProcessId;
    IUnknown* pUnkOuter;
    DWORD dwObsolete1;
    UINT_PTR hWnd;
    UINT_PTR hDC;
    DWORD dwErrorMode;
    DDRAWI_DDRAWSURFACE_INT* lpPrimary;
    DDRAWI_DDRAWSURFACE_INT* lpCB;
    DWORD dwPreferredMode;
    HINSTANCE hD3DInstance;
    IUnknown* pD3DIUnknown;
    DDHAL_CALLBACKS* lpDDCB;
    UINT_PTR hDDVxd;
    DWORD dwAppHackFlags;
    UINT_PTR hFocusWnd;
    DWORD dwHotTracking;
    DWORD dwIMEState;
    UINT_PTR hWndPopup;
    UINT_PTR hDD;
    UINT_PTR hGammaCalibrator;
    LPDDGAMMACALIBRATORPROC lpGammaCalibrator;
} DDRAWI_DIRECTDRAW_LCL;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DDRAWI_DIRECTDRAW_LCL
{
    public uint lpDDMore;
    public IntPtr lpGbl;
    public uint dwUnused0;
    public uint dwLocalFlags;
    public uint dwLocalRefCnt;
    public uint dwProcessId;
    public IntPtr pUnkOuter;
    public uint dwObsolete1;
    public UIntPtr hWnd;
    public UIntPtr hDC;
    public uint dwErrorMode;
    public IntPtr lpPrimary;
    public IntPtr lpCB;
    public uint dwPreferredMode;
    public IntPtr hD3DInstance;
    public IntPtr pD3DIUnknown;
    public IntPtr lpDDCB;
    public UIntPtr hDDVxd;
    public uint dwAppHackFlags;
    public UIntPtr hFocusWnd;
    public uint dwHotTracking;
    public uint dwIMEState;
    public UIntPtr hWndPopup;
    public UIntPtr hDD;
    public UIntPtr hGammaCalibrator;
    public IntPtr lpGammaCalibrator;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DDRAWI_DIRECTDRAW_LCL
    Public lpDDMore As UInteger
    Public lpGbl As IntPtr
    Public dwUnused0 As UInteger
    Public dwLocalFlags As UInteger
    Public dwLocalRefCnt As UInteger
    Public dwProcessId As UInteger
    Public pUnkOuter As IntPtr
    Public dwObsolete1 As UInteger
    Public hWnd As UIntPtr
    Public hDC As UIntPtr
    Public dwErrorMode As UInteger
    Public lpPrimary As IntPtr
    Public lpCB As IntPtr
    Public dwPreferredMode As UInteger
    Public hD3DInstance As IntPtr
    Public pD3DIUnknown As IntPtr
    Public lpDDCB As IntPtr
    Public hDDVxd As UIntPtr
    Public dwAppHackFlags As UInteger
    Public hFocusWnd As UIntPtr
    Public dwHotTracking As UInteger
    Public dwIMEState As UInteger
    Public hWndPopup As UIntPtr
    Public hDD As UIntPtr
    Public hGammaCalibrator As UIntPtr
    Public lpGammaCalibrator As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class DDRAWI_DIRECTDRAW_LCL(ctypes.Structure):
    _fields_ = [
        ("lpDDMore", wintypes.DWORD),
        ("lpGbl", ctypes.c_void_p),
        ("dwUnused0", wintypes.DWORD),
        ("dwLocalFlags", wintypes.DWORD),
        ("dwLocalRefCnt", wintypes.DWORD),
        ("dwProcessId", wintypes.DWORD),
        ("pUnkOuter", ctypes.c_void_p),
        ("dwObsolete1", wintypes.DWORD),
        ("hWnd", ctypes.c_size_t),
        ("hDC", ctypes.c_size_t),
        ("dwErrorMode", wintypes.DWORD),
        ("lpPrimary", ctypes.c_void_p),
        ("lpCB", ctypes.c_void_p),
        ("dwPreferredMode", wintypes.DWORD),
        ("hD3DInstance", ctypes.c_void_p),
        ("pD3DIUnknown", ctypes.c_void_p),
        ("lpDDCB", ctypes.c_void_p),
        ("hDDVxd", ctypes.c_size_t),
        ("dwAppHackFlags", wintypes.DWORD),
        ("hFocusWnd", ctypes.c_size_t),
        ("dwHotTracking", wintypes.DWORD),
        ("dwIMEState", wintypes.DWORD),
        ("hWndPopup", ctypes.c_size_t),
        ("hDD", ctypes.c_size_t),
        ("hGammaCalibrator", ctypes.c_size_t),
        ("lpGammaCalibrator", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct DDRAWI_DIRECTDRAW_LCL {
    pub lpDDMore: u32,
    pub lpGbl: *mut core::ffi::c_void,
    pub dwUnused0: u32,
    pub dwLocalFlags: u32,
    pub dwLocalRefCnt: u32,
    pub dwProcessId: u32,
    pub pUnkOuter: *mut core::ffi::c_void,
    pub dwObsolete1: u32,
    pub hWnd: usize,
    pub hDC: usize,
    pub dwErrorMode: u32,
    pub lpPrimary: *mut core::ffi::c_void,
    pub lpCB: *mut core::ffi::c_void,
    pub dwPreferredMode: u32,
    pub hD3DInstance: *mut core::ffi::c_void,
    pub pD3DIUnknown: *mut core::ffi::c_void,
    pub lpDDCB: *mut core::ffi::c_void,
    pub hDDVxd: usize,
    pub dwAppHackFlags: u32,
    pub hFocusWnd: usize,
    pub dwHotTracking: u32,
    pub dwIMEState: u32,
    pub hWndPopup: usize,
    pub hDD: usize,
    pub hGammaCalibrator: usize,
    pub lpGammaCalibrator: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type DDRAWI_DIRECTDRAW_LCL struct {
	lpDDMore uint32
	lpGbl uintptr
	dwUnused0 uint32
	dwLocalFlags uint32
	dwLocalRefCnt uint32
	dwProcessId uint32
	pUnkOuter uintptr
	dwObsolete1 uint32
	hWnd uintptr
	hDC uintptr
	dwErrorMode uint32
	lpPrimary uintptr
	lpCB uintptr
	dwPreferredMode uint32
	hD3DInstance uintptr
	pD3DIUnknown uintptr
	lpDDCB uintptr
	hDDVxd uintptr
	dwAppHackFlags uint32
	hFocusWnd uintptr
	dwHotTracking uint32
	dwIMEState uint32
	hWndPopup uintptr
	hDD uintptr
	hGammaCalibrator uintptr
	lpGammaCalibrator uintptr
}
type
  DDRAWI_DIRECTDRAW_LCL = record
    lpDDMore: DWORD;
    lpGbl: Pointer;
    dwUnused0: DWORD;
    dwLocalFlags: DWORD;
    dwLocalRefCnt: DWORD;
    dwProcessId: DWORD;
    pUnkOuter: Pointer;
    dwObsolete1: DWORD;
    hWnd: NativeUInt;
    hDC: NativeUInt;
    dwErrorMode: DWORD;
    lpPrimary: Pointer;
    lpCB: Pointer;
    dwPreferredMode: DWORD;
    hD3DInstance: Pointer;
    pD3DIUnknown: Pointer;
    lpDDCB: Pointer;
    hDDVxd: NativeUInt;
    dwAppHackFlags: DWORD;
    hFocusWnd: NativeUInt;
    dwHotTracking: DWORD;
    dwIMEState: DWORD;
    hWndPopup: NativeUInt;
    hDD: NativeUInt;
    hGammaCalibrator: NativeUInt;
    lpGammaCalibrator: Pointer;
  end;
const DDRAWI_DIRECTDRAW_LCL = extern struct {
    lpDDMore: u32,
    lpGbl: ?*anyopaque,
    dwUnused0: u32,
    dwLocalFlags: u32,
    dwLocalRefCnt: u32,
    dwProcessId: u32,
    pUnkOuter: ?*anyopaque,
    dwObsolete1: u32,
    hWnd: usize,
    hDC: usize,
    dwErrorMode: u32,
    lpPrimary: ?*anyopaque,
    lpCB: ?*anyopaque,
    dwPreferredMode: u32,
    hD3DInstance: ?*anyopaque,
    pD3DIUnknown: ?*anyopaque,
    lpDDCB: ?*anyopaque,
    hDDVxd: usize,
    dwAppHackFlags: u32,
    hFocusWnd: usize,
    dwHotTracking: u32,
    dwIMEState: u32,
    hWndPopup: usize,
    hDD: usize,
    hGammaCalibrator: usize,
    lpGammaCalibrator: ?*anyopaque,
};
type
  DDRAWI_DIRECTDRAW_LCL {.bycopy.} = object
    lpDDMore: uint32
    lpGbl: pointer
    dwUnused0: uint32
    dwLocalFlags: uint32
    dwLocalRefCnt: uint32
    dwProcessId: uint32
    pUnkOuter: pointer
    dwObsolete1: uint32
    hWnd: uint
    hDC: uint
    dwErrorMode: uint32
    lpPrimary: pointer
    lpCB: pointer
    dwPreferredMode: uint32
    hD3DInstance: pointer
    pD3DIUnknown: pointer
    lpDDCB: pointer
    hDDVxd: uint
    dwAppHackFlags: uint32
    hFocusWnd: uint
    dwHotTracking: uint32
    dwIMEState: uint32
    hWndPopup: uint
    hDD: uint
    hGammaCalibrator: uint
    lpGammaCalibrator: pointer
struct DDRAWI_DIRECTDRAW_LCL
{
    uint lpDDMore;
    void* lpGbl;
    uint dwUnused0;
    uint dwLocalFlags;
    uint dwLocalRefCnt;
    uint dwProcessId;
    void* pUnkOuter;
    uint dwObsolete1;
    size_t hWnd;
    size_t hDC;
    uint dwErrorMode;
    void* lpPrimary;
    void* lpCB;
    uint dwPreferredMode;
    void* hD3DInstance;
    void* pD3DIUnknown;
    void* lpDDCB;
    size_t hDDVxd;
    uint dwAppHackFlags;
    size_t hFocusWnd;
    uint dwHotTracking;
    uint dwIMEState;
    size_t hWndPopup;
    size_t hDD;
    size_t hGammaCalibrator;
    void* lpGammaCalibrator;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DDRAWI_DIRECTDRAW_LCL サイズ: 104 バイト(x86)
dim st, 26    ; 4byte整数×26(構造体サイズ 104 / 4 切り上げ)
; lpDDMore : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; lpGbl : DDRAWI_DIRECTDRAW_GBL* (+4, 4byte)  varptr(st)+4 を基点に操作(4byte:入れ子/配列)
; dwUnused0 : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwLocalFlags : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwLocalRefCnt : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwProcessId : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; pUnkOuter : IUnknown* (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; dwObsolete1 : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; hWnd : UINT_PTR (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; hDC : UINT_PTR (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; dwErrorMode : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; lpPrimary : DDRAWI_DDRAWSURFACE_INT* (+44, 4byte)  varptr(st)+44 を基点に操作(4byte:入れ子/配列)
; lpCB : DDRAWI_DDRAWSURFACE_INT* (+48, 4byte)  varptr(st)+48 を基点に操作(4byte:入れ子/配列)
; dwPreferredMode : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; hD3DInstance : HINSTANCE (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; pD3DIUnknown : IUnknown* (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; lpDDCB : DDHAL_CALLBACKS* (+64, 4byte)  varptr(st)+64 を基点に操作(4byte:入れ子/配列)
; hDDVxd : UINT_PTR (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; dwAppHackFlags : DWORD (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; hFocusWnd : UINT_PTR (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; dwHotTracking : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; dwIMEState : DWORD (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; hWndPopup : UINT_PTR (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; hDD : UINT_PTR (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; hGammaCalibrator : UINT_PTR (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; lpGammaCalibrator : LPDDGAMMACALIBRATORPROC (+100, 4byte)  st.25 = 値  /  値 = st.25   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DDRAWI_DIRECTDRAW_LCL サイズ: 184 バイト(x64)
dim st, 46    ; 4byte整数×46(構造体サイズ 184 / 4 切り上げ)
; lpDDMore : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; lpGbl : DDRAWI_DIRECTDRAW_GBL* (+8, 8byte)  varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; dwUnused0 : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwLocalFlags : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; dwLocalRefCnt : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; dwProcessId : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; pUnkOuter : IUnknown* (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; dwObsolete1 : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; hWnd : UINT_PTR (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; hDC : UINT_PTR (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; dwErrorMode : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; lpPrimary : DDRAWI_DDRAWSURFACE_INT* (+72, 8byte)  varptr(st)+72 を基点に操作(8byte:入れ子/配列)
; lpCB : DDRAWI_DDRAWSURFACE_INT* (+80, 8byte)  varptr(st)+80 を基点に操作(8byte:入れ子/配列)
; dwPreferredMode : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; hD3DInstance : HINSTANCE (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; pD3DIUnknown : IUnknown* (+104, 8byte)  qpoke st,104,値 / qpeek(st,104)  ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; lpDDCB : DDHAL_CALLBACKS* (+112, 8byte)  varptr(st)+112 を基点に操作(8byte:入れ子/配列)
; hDDVxd : UINT_PTR (+120, 8byte)  qpoke st,120,値 / qpeek(st,120)  ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; dwAppHackFlags : DWORD (+128, 4byte)  st.32 = 値  /  値 = st.32   (lpoke/lpeek も可)
; hFocusWnd : UINT_PTR (+136, 8byte)  qpoke st,136,値 / qpeek(st,136)  ※IronHSPのみ。3.7/3.8は lpoke st,136,下位 : lpoke st,140,上位
; dwHotTracking : DWORD (+144, 4byte)  st.36 = 値  /  値 = st.36   (lpoke/lpeek も可)
; dwIMEState : DWORD (+148, 4byte)  st.37 = 値  /  値 = st.37   (lpoke/lpeek も可)
; hWndPopup : UINT_PTR (+152, 8byte)  qpoke st,152,値 / qpeek(st,152)  ※IronHSPのみ。3.7/3.8は lpoke st,152,下位 : lpoke st,156,上位
; hDD : UINT_PTR (+160, 8byte)  qpoke st,160,値 / qpeek(st,160)  ※IronHSPのみ。3.7/3.8は lpoke st,160,下位 : lpoke st,164,上位
; hGammaCalibrator : UINT_PTR (+168, 8byte)  qpoke st,168,値 / qpeek(st,168)  ※IronHSPのみ。3.7/3.8は lpoke st,168,下位 : lpoke st,172,上位
; lpGammaCalibrator : LPDDGAMMACALIBRATORPROC (+176, 8byte)  qpoke st,176,値 / qpeek(st,176)  ※IronHSPのみ。3.7/3.8は lpoke st,176,下位 : lpoke st,180,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DDRAWI_DIRECTDRAW_LCL
    #field int lpDDMore
    #field intptr lpGbl
    #field int dwUnused0
    #field int dwLocalFlags
    #field int dwLocalRefCnt
    #field int dwProcessId
    #field intptr pUnkOuter
    #field int dwObsolete1
    #field intptr hWnd
    #field intptr hDC
    #field int dwErrorMode
    #field intptr lpPrimary
    #field intptr lpCB
    #field int dwPreferredMode
    #field intptr hD3DInstance
    #field intptr pD3DIUnknown
    #field intptr lpDDCB
    #field intptr hDDVxd
    #field int dwAppHackFlags
    #field intptr hFocusWnd
    #field int dwHotTracking
    #field int dwIMEState
    #field intptr hWndPopup
    #field intptr hDD
    #field intptr hGammaCalibrator
    #field intptr lpGammaCalibrator
#endstruct

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