Win32 API 日本語リファレンス
ホームSystem.Ole › OLEUICHANGESOURCEW

OLEUICHANGESOURCEW

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

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

フィールド

フィールドサイズx64x86説明
cbStructDWORD4+0+0構造体のサイズ (バイト単位)。
dwFlagsCHANGE_SOURCE_FLAGS4+4+4

入力時、このフィールドは初期化フラグおよび作成フラグを指定します。終了時には、ユーザーが選択した内容を示します。次のフラグの組み合わせを指定できます。

意味
CSF_SHOWHELP
[ヘルプ] ボタンを有効にする、または表示します。
CSF_VALIDSOURCE
リンクが検証されたことを示します。
CSF_ONLYGETSOURCE
ユーザーが [OK] を押したときのリンク ソースの自動検証を無効にします。このフラグを指定した場合は、ダイアログ ボックスが OK を返したときに自分でソースを検証する必要があります。
hWndOwnerHWND8/4+8+8ダイアログ ボックスを所有するウィンドウ。
lpszCaptionLPWSTR8/4+16+12ダイアログ ボックスのタイトルとして使用する文字列へのポインター。NULL の場合、ライブラリは [ソースの変更] を使用します。
lpfnHookLPFNOLEUIHOOK8/4+24+16ダイアログ ボックス宛てのメッセージを処理するフック関数へのポインター。フック関数が処理しなかったメッセージをライブラリ内のダイアログ ボックス プロシージャに渡すには、フック関数は 0 を返さなければなりません。既に処理したメッセージをライブラリのダイアログ ボックス プロシージャが処理しないようにするには、フック関数は 0 以外の値を返さなければなりません。
lCustDataLPARAM8/4+32+20WM_INITDIALOG メッセージの lParam パラメーターで OLEUICHANGEICON 構造体が指すフック関数に、ライブラリが渡すアプリケーション定義のデータ。このポインターを使用して lCustData メンバーを取得できます。
hInstanceHINSTANCE8/4+40+24lpszTemplate メンバーで指定されたダイアログ ボックス テンプレートを格納するインスタンス。lpszTemplate メンバーが NULL または無効な場合、このメンバーは無視されます。
lpszTemplateLPWSTR8/4+48+28ライブラリの [変換] ダイアログ ボックス テンプレートの代わりに使用するダイアログ ボックス テンプレートのリソース ファイル名を指定する、null 終端文字列へのポインター。
hResourceHRSRC8/4+56+32カスタム ダイアログ ボックスのリソース ハンドル。このメンバーが NULL の場合、ライブラリは標準の [変換] ダイアログ ボックス テンプレートを使用します。有効な場合は、lpszTemplate メンバーで指定された名前のテンプレートを使用します。
lpOFNOPENFILENAMEW*8/4+64+36OPENFILENAME 構造体へのポインター。この構造体には、システム定義の [開く] または [名前を付けて保存] ダイアログ ボックスの初期化にオペレーティング システムが使用する情報が格納されます。
dwReserved1DWORD16+72+40このメンバーは予約済みです。
lpOleUILinkContainerIOleUILinkContainerW*8/4+88+56リンク ソースの検証に使用される、コンテナーによる IOleUILinkContainer インターフェイスの実装へのポインター。[リンクの編集] ダイアログ ボックスは、これを使用してコンテナーが自身のリンクを操作できるようにします。
dwLinkDWORD4+96+60リンク ソースの検証に使用される、コンテナー定義の一意なリンク識別子。lpOleUILinkContainer によって使用されます。
lpszDisplayNameLPWSTR8/4+104+64完全なソース表示名へのポインター。
nFileLengthDWORD4+112+68lpszDisplayName のうちファイル モニカーの部分。
lpszFromLPWSTR8/4+120+72変更元となったソースのプレフィックスへのポインター。
lpszToLPWSTR8/4+128+76変更先となるソースのプレフィックスへのポインター。

公式ドキュメント

標準の [ソースの変更] ダイアログ ボックスの初期化に使用される情報を格納します。このダイアログ ボックスにより、ユーザーはリンクの参照先またはソースを変更できます。これは、単にリンク先として別のファイル名を選択するだけの場合もあれば、ファイル内の項目参照を変更する場合、たとえばリンク先となるスプレッドシート内のセル範囲を変更する場合もあります。

解説(Remarks)

メモ

oledlg.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいてこの関数の ANSI 版または Unicode 版を自動的に選択するエイリアスとして、OLEUICHANGESOURCE を定義します。エンコーディング中立のエイリアスの使用と、エンコーディング中立でないコードを混在させると、不一致が生じてコンパイル エラーまたは実行時エラーの原因となることがあります。詳細については、関数プロトタイプの規則を参照してください。

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

各言語での定義

#include <windows.h>

// OLEUICHANGESOURCEW  (x64 136 / x86 80 バイト)
typedef struct OLEUICHANGESOURCEW {
    DWORD cbStruct;
    CHANGE_SOURCE_FLAGS dwFlags;
    HWND hWndOwner;
    LPWSTR lpszCaption;
    LPFNOLEUIHOOK lpfnHook;
    LPARAM lCustData;
    HINSTANCE hInstance;
    LPWSTR lpszTemplate;
    HRSRC hResource;
    OPENFILENAMEW* lpOFN;
    DWORD dwReserved1[4];
    IOleUILinkContainerW* lpOleUILinkContainer;
    DWORD dwLink;
    LPWSTR lpszDisplayName;
    DWORD nFileLength;
    LPWSTR lpszFrom;
    LPWSTR lpszTo;
} OLEUICHANGESOURCEW;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct OLEUICHANGESOURCEW
{
    public uint cbStruct;
    public uint dwFlags;
    public IntPtr hWndOwner;
    public IntPtr lpszCaption;
    public IntPtr lpfnHook;
    public IntPtr lCustData;
    public IntPtr hInstance;
    public IntPtr lpszTemplate;
    public IntPtr hResource;
    public IntPtr lpOFN;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public uint[] dwReserved1;
    public IntPtr lpOleUILinkContainer;
    public uint dwLink;
    public IntPtr lpszDisplayName;
    public uint nFileLength;
    public IntPtr lpszFrom;
    public IntPtr lpszTo;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure OLEUICHANGESOURCEW
    Public cbStruct As UInteger
    Public dwFlags As UInteger
    Public hWndOwner As IntPtr
    Public lpszCaption As IntPtr
    Public lpfnHook As IntPtr
    Public lCustData As IntPtr
    Public hInstance As IntPtr
    Public lpszTemplate As IntPtr
    Public hResource As IntPtr
    Public lpOFN As IntPtr
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Public dwReserved1() As UInteger
    Public lpOleUILinkContainer As IntPtr
    Public dwLink As UInteger
    Public lpszDisplayName As IntPtr
    Public nFileLength As UInteger
    Public lpszFrom As IntPtr
    Public lpszTo As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class OLEUICHANGESOURCEW(ctypes.Structure):
    _fields_ = [
        ("cbStruct", wintypes.DWORD),
        ("dwFlags", wintypes.DWORD),
        ("hWndOwner", ctypes.c_void_p),
        ("lpszCaption", ctypes.c_void_p),
        ("lpfnHook", ctypes.c_void_p),
        ("lCustData", ctypes.c_ssize_t),
        ("hInstance", ctypes.c_void_p),
        ("lpszTemplate", ctypes.c_void_p),
        ("hResource", ctypes.c_void_p),
        ("lpOFN", ctypes.c_void_p),
        ("dwReserved1", wintypes.DWORD * 4),
        ("lpOleUILinkContainer", ctypes.c_void_p),
        ("dwLink", wintypes.DWORD),
        ("lpszDisplayName", ctypes.c_void_p),
        ("nFileLength", wintypes.DWORD),
        ("lpszFrom", ctypes.c_void_p),
        ("lpszTo", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct OLEUICHANGESOURCEW {
    pub cbStruct: u32,
    pub dwFlags: u32,
    pub hWndOwner: *mut core::ffi::c_void,
    pub lpszCaption: *mut core::ffi::c_void,
    pub lpfnHook: *mut core::ffi::c_void,
    pub lCustData: isize,
    pub hInstance: *mut core::ffi::c_void,
    pub lpszTemplate: *mut core::ffi::c_void,
    pub hResource: *mut core::ffi::c_void,
    pub lpOFN: *mut core::ffi::c_void,
    pub dwReserved1: [u32; 4],
    pub lpOleUILinkContainer: *mut core::ffi::c_void,
    pub dwLink: u32,
    pub lpszDisplayName: *mut core::ffi::c_void,
    pub nFileLength: u32,
    pub lpszFrom: *mut core::ffi::c_void,
    pub lpszTo: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type OLEUICHANGESOURCEW struct {
	cbStruct uint32
	dwFlags uint32
	hWndOwner uintptr
	lpszCaption uintptr
	lpfnHook uintptr
	lCustData uintptr
	hInstance uintptr
	lpszTemplate uintptr
	hResource uintptr
	lpOFN uintptr
	dwReserved1 [4]uint32
	lpOleUILinkContainer uintptr
	dwLink uint32
	lpszDisplayName uintptr
	nFileLength uint32
	lpszFrom uintptr
	lpszTo uintptr
}
type
  OLEUICHANGESOURCEW = record
    cbStruct: DWORD;
    dwFlags: DWORD;
    hWndOwner: Pointer;
    lpszCaption: Pointer;
    lpfnHook: Pointer;
    lCustData: NativeInt;
    hInstance: Pointer;
    lpszTemplate: Pointer;
    hResource: Pointer;
    lpOFN: Pointer;
    dwReserved1: array[0..3] of DWORD;
    lpOleUILinkContainer: Pointer;
    dwLink: DWORD;
    lpszDisplayName: Pointer;
    nFileLength: DWORD;
    lpszFrom: Pointer;
    lpszTo: Pointer;
  end;
const OLEUICHANGESOURCEW = extern struct {
    cbStruct: u32,
    dwFlags: u32,
    hWndOwner: ?*anyopaque,
    lpszCaption: ?*anyopaque,
    lpfnHook: ?*anyopaque,
    lCustData: isize,
    hInstance: ?*anyopaque,
    lpszTemplate: ?*anyopaque,
    hResource: ?*anyopaque,
    lpOFN: ?*anyopaque,
    dwReserved1: [4]u32,
    lpOleUILinkContainer: ?*anyopaque,
    dwLink: u32,
    lpszDisplayName: ?*anyopaque,
    nFileLength: u32,
    lpszFrom: ?*anyopaque,
    lpszTo: ?*anyopaque,
};
type
  OLEUICHANGESOURCEW {.bycopy.} = object
    cbStruct: uint32
    dwFlags: uint32
    hWndOwner: pointer
    lpszCaption: pointer
    lpfnHook: pointer
    lCustData: int
    hInstance: pointer
    lpszTemplate: pointer
    hResource: pointer
    lpOFN: pointer
    dwReserved1: array[4, uint32]
    lpOleUILinkContainer: pointer
    dwLink: uint32
    lpszDisplayName: pointer
    nFileLength: uint32
    lpszFrom: pointer
    lpszTo: pointer
struct OLEUICHANGESOURCEW
{
    uint cbStruct;
    uint dwFlags;
    void* hWndOwner;
    void* lpszCaption;
    void* lpfnHook;
    ptrdiff_t lCustData;
    void* hInstance;
    void* lpszTemplate;
    void* hResource;
    void* lpOFN;
    uint[4] dwReserved1;
    void* lpOleUILinkContainer;
    uint dwLink;
    void* lpszDisplayName;
    uint nFileLength;
    void* lpszFrom;
    void* lpszTo;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; OLEUICHANGESOURCEW サイズ: 80 バイト(x86)
dim st, 20    ; 4byte整数×20(構造体サイズ 80 / 4 切り上げ)
; cbStruct : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwFlags : CHANGE_SOURCE_FLAGS (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; hWndOwner : HWND (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; lpszCaption : LPWSTR (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; lpfnHook : LPFNOLEUIHOOK (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; lCustData : LPARAM (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; hInstance : HINSTANCE (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; lpszTemplate : LPWSTR (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; hResource : HRSRC (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; lpOFN : OPENFILENAMEW* (+36, 4byte)  varptr(st)+36 を基点に操作(4byte:入れ子/配列)
; dwReserved1 : DWORD (+40, 16byte)  varptr(st)+40 を基点に操作(16byte:入れ子/配列)
; lpOleUILinkContainer : IOleUILinkContainerW* (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; dwLink : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; lpszDisplayName : LPWSTR (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; nFileLength : DWORD (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; lpszFrom : LPWSTR (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; lpszTo : LPWSTR (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; OLEUICHANGESOURCEW サイズ: 136 バイト(x64)
dim st, 34    ; 4byte整数×34(構造体サイズ 136 / 4 切り上げ)
; cbStruct : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwFlags : CHANGE_SOURCE_FLAGS (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; hWndOwner : HWND (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; lpszCaption : LPWSTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; lpfnHook : LPFNOLEUIHOOK (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; lCustData : LPARAM (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; hInstance : HINSTANCE (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; lpszTemplate : LPWSTR (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; hResource : HRSRC (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; lpOFN : OPENFILENAMEW* (+64, 8byte)  varptr(st)+64 を基点に操作(8byte:入れ子/配列)
; dwReserved1 : DWORD (+72, 16byte)  varptr(st)+72 を基点に操作(16byte:入れ子/配列)
; lpOleUILinkContainer : IOleUILinkContainerW* (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; dwLink : DWORD (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; lpszDisplayName : LPWSTR (+104, 8byte)  qpoke st,104,値 / qpeek(st,104)  ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; nFileLength : DWORD (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; lpszFrom : LPWSTR (+120, 8byte)  qpoke st,120,値 / qpeek(st,120)  ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; lpszTo : LPWSTR (+128, 8byte)  qpoke st,128,値 / qpeek(st,128)  ※IronHSPのみ。3.7/3.8は lpoke st,128,下位 : lpoke st,132,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global OLEUICHANGESOURCEW
    #field int cbStruct
    #field int dwFlags
    #field intptr hWndOwner
    #field intptr lpszCaption
    #field intptr lpfnHook
    #field intptr lCustData
    #field intptr hInstance
    #field intptr lpszTemplate
    #field intptr hResource
    #field intptr lpOFN
    #field int dwReserved1 4
    #field intptr lpOleUILinkContainer
    #field int dwLink
    #field intptr lpszDisplayName
    #field int nFileLength
    #field intptr lpszFrom
    #field intptr lpszTo
#endstruct

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