ホーム › UI.Controls.Dialogs › CHOOSEFONTW
CHOOSEFONTW
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| lStructSize | DWORD | 4 | +0 | +0 | この構造体のサイズをバイト単位で指定する。ChooseFontW呼び出し前に必ず設定する。 |
| hwndOwner | HWND | 8/4 | +4 | +4 | ダイアログを所有する親ウィンドウのハンドル。NULL可だがフック使用時等は指定する。 |
| hDC | HDC | 8/4 | +12 | +8 | プリンタフォント列挙に使うデバイスコンテキストのハンドル。CF_PRINTERFONTS指定時に使用する。 |
| lpLogFont | LOGFONTW* | 8/4 | +20 | +12 | 選択結果を受け取るLOGFONTW構造体へのポインタ。初期フォント指定にも使われる。 |
| iPointSize | INT | 4 | +28 | +16 | 選択されたフォントのサイズを1/10ポイント単位で受け取る。 |
| Flags | CHOOSEFONT_FLAGS | 4 | +32 | +20 | ダイアログの初期化や動作を制御するCF_系フラグの組み合わせ。 |
| rgbColors | COLORREF | 4 | +36 | +24 | CF_EFFECTS指定時の文字色。COLORREF形式で入出力に使われる。 |
| lCustData | LPARAM | 8/4 | +40 | +28 | フックプロシージャに渡されるアプリケーション定義データ。 |
| lpfnHook | LPCFHOOKPROC | 8/4 | +48 | +32 | メッセージを処理するCFHookProcフックプロシージャへのポインタ。CF_ENABLEHOOK時に有効。 |
| lpTemplateName | LPWSTR | 8/4 | +56 | +36 | CF_ENABLETEMPLATE指定時のダイアログテンプレートのリソース名。 |
| hInstance | HINSTANCE | 8/4 | +64 | +40 | テンプレートやフックを含むモジュールのインスタンスハンドル。 |
| lpszStyle | LPWSTR | 8/4 | +72 | +44 | スタイル名を入出力する文字列バッファ。CF_USESTYLE指定時に使われる。 |
| nFontType | CHOOSEFONT_FONT_TYPE | 2 | +80 | +48 | 選択フォントの種別を示すフラグ。SIMULATED_FONTTYPE等が返る。 |
| ___MISSING_ALIGNMENT__ | WORD | 2 | +82 | +50 | 構造体のアライメント調整用の予約WORD。使用しない。 |
| nSizeMin | INT | 4 | +84 | +52 | CF_LIMITSIZE指定時の選択可能な最小ポイントサイズ。 |
| nSizeMax | INT | 4 | +88 | +56 | CF_LIMITSIZE指定時の選択可能な最大ポイントサイズ。 |
各言語での定義
#include <windows.h>
// CHOOSEFONTW (x64 92 / x86 60 バイト)
#pragma pack(push, 1)
typedef struct CHOOSEFONTW {
DWORD lStructSize;
HWND hwndOwner;
HDC hDC;
LOGFONTW* lpLogFont;
INT iPointSize;
CHOOSEFONT_FLAGS Flags;
COLORREF rgbColors;
LPARAM lCustData;
LPCFHOOKPROC lpfnHook;
LPWSTR lpTemplateName;
HINSTANCE hInstance;
LPWSTR lpszStyle;
CHOOSEFONT_FONT_TYPE nFontType;
WORD ___MISSING_ALIGNMENT__;
INT nSizeMin;
INT nSizeMax;
} CHOOSEFONTW;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct CHOOSEFONTW
{
public uint lStructSize;
public IntPtr hwndOwner;
public IntPtr hDC;
public IntPtr lpLogFont;
public int iPointSize;
public uint Flags;
public uint rgbColors;
public IntPtr lCustData;
public IntPtr lpfnHook;
public IntPtr lpTemplateName;
public IntPtr hInstance;
public IntPtr lpszStyle;
public ushort nFontType;
public ushort ___MISSING_ALIGNMENT__;
public int nSizeMin;
public int nSizeMax;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure CHOOSEFONTW
Public lStructSize As UInteger
Public hwndOwner As IntPtr
Public hDC As IntPtr
Public lpLogFont As IntPtr
Public iPointSize As Integer
Public Flags As UInteger
Public rgbColors As UInteger
Public lCustData As IntPtr
Public lpfnHook As IntPtr
Public lpTemplateName As IntPtr
Public hInstance As IntPtr
Public lpszStyle As IntPtr
Public nFontType As UShort
Public ___MISSING_ALIGNMENT__ As UShort
Public nSizeMin As Integer
Public nSizeMax As Integer
End Structureimport ctypes
from ctypes import wintypes
class CHOOSEFONTW(ctypes.Structure):
_pack_ = 1
_fields_ = [
("lStructSize", wintypes.DWORD),
("hwndOwner", ctypes.c_void_p),
("hDC", ctypes.c_void_p),
("lpLogFont", ctypes.c_void_p),
("iPointSize", ctypes.c_int),
("Flags", wintypes.DWORD),
("rgbColors", wintypes.DWORD),
("lCustData", ctypes.c_ssize_t),
("lpfnHook", ctypes.c_void_p),
("lpTemplateName", ctypes.c_void_p),
("hInstance", ctypes.c_void_p),
("lpszStyle", ctypes.c_void_p),
("nFontType", ctypes.c_ushort),
("___MISSING_ALIGNMENT__", ctypes.c_ushort),
("nSizeMin", ctypes.c_int),
("nSizeMax", ctypes.c_int),
]#[repr(C, packed(1))]
pub struct CHOOSEFONTW {
pub lStructSize: u32,
pub hwndOwner: *mut core::ffi::c_void,
pub hDC: *mut core::ffi::c_void,
pub lpLogFont: *mut core::ffi::c_void,
pub iPointSize: i32,
pub Flags: u32,
pub rgbColors: u32,
pub lCustData: isize,
pub lpfnHook: *mut core::ffi::c_void,
pub lpTemplateName: *mut core::ffi::c_void,
pub hInstance: *mut core::ffi::c_void,
pub lpszStyle: *mut core::ffi::c_void,
pub nFontType: u16,
pub ___MISSING_ALIGNMENT__: u16,
pub nSizeMin: i32,
pub nSizeMax: i32,
}import "golang.org/x/sys/windows"
type CHOOSEFONTW struct {
lStructSize uint32
hwndOwner uintptr
hDC uintptr
lpLogFont uintptr
iPointSize int32
Flags uint32
rgbColors uint32
lCustData uintptr
lpfnHook uintptr
lpTemplateName uintptr
hInstance uintptr
lpszStyle uintptr
nFontType uint16
___MISSING_ALIGNMENT__ uint16
nSizeMin int32
nSizeMax int32
}type
CHOOSEFONTW = packed record
lStructSize: DWORD;
hwndOwner: Pointer;
hDC: Pointer;
lpLogFont: Pointer;
iPointSize: Integer;
Flags: DWORD;
rgbColors: DWORD;
lCustData: NativeInt;
lpfnHook: Pointer;
lpTemplateName: Pointer;
hInstance: Pointer;
lpszStyle: Pointer;
nFontType: Word;
___MISSING_ALIGNMENT__: Word;
nSizeMin: Integer;
nSizeMax: Integer;
end;const CHOOSEFONTW = extern struct {
lStructSize: u32,
hwndOwner: ?*anyopaque,
hDC: ?*anyopaque,
lpLogFont: ?*anyopaque,
iPointSize: i32,
Flags: u32,
rgbColors: u32,
lCustData: isize,
lpfnHook: ?*anyopaque,
lpTemplateName: ?*anyopaque,
hInstance: ?*anyopaque,
lpszStyle: ?*anyopaque,
nFontType: u16,
___MISSING_ALIGNMENT__: u16,
nSizeMin: i32,
nSizeMax: i32,
};type
CHOOSEFONTW {.packed.} = object
lStructSize: uint32
hwndOwner: pointer
hDC: pointer
lpLogFont: pointer
iPointSize: int32
Flags: uint32
rgbColors: uint32
lCustData: int
lpfnHook: pointer
lpTemplateName: pointer
hInstance: pointer
lpszStyle: pointer
nFontType: uint16
___MISSING_ALIGNMENT__: uint16
nSizeMin: int32
nSizeMax: int32align(1)
struct CHOOSEFONTW
{
uint lStructSize;
void* hwndOwner;
void* hDC;
void* lpLogFont;
int iPointSize;
uint Flags;
uint rgbColors;
ptrdiff_t lCustData;
void* lpfnHook;
void* lpTemplateName;
void* hInstance;
void* lpszStyle;
ushort nFontType;
ushort ___MISSING_ALIGNMENT__;
int nSizeMin;
int nSizeMax;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; CHOOSEFONTW サイズ: 60 バイト(x86)
dim st, 15 ; 4byte整数×15(構造体サイズ 60 / 4 切り上げ)
; lStructSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; hwndOwner : HWND (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; hDC : HDC (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; lpLogFont : LOGFONTW* (+12, 4byte) varptr(st)+12 を基点に操作(4byte:入れ子/配列)
; iPointSize : INT (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; Flags : CHOOSEFONT_FLAGS (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; rgbColors : COLORREF (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; lCustData : LPARAM (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; lpfnHook : LPCFHOOKPROC (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; lpTemplateName : LPWSTR (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; hInstance : HINSTANCE (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; lpszStyle : LPWSTR (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; nFontType : CHOOSEFONT_FONT_TYPE (+48, 2byte) wpoke st,48,値 / 値 = wpeek(st,48)
; ___MISSING_ALIGNMENT__ : WORD (+50, 2byte) wpoke st,50,値 / 値 = wpeek(st,50)
; nSizeMin : INT (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; nSizeMax : INT (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; CHOOSEFONTW サイズ: 92 バイト(x64)
dim st, 23 ; 4byte整数×23(構造体サイズ 92 / 4 切り上げ)
; lStructSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; hwndOwner : HWND (+4, 8byte) qpoke st,4,値 / qpeek(st,4) ※IronHSPのみ。3.7/3.8は lpoke st,4,下位 : lpoke st,8,上位
; hDC : HDC (+12, 8byte) qpoke st,12,値 / qpeek(st,12) ※IronHSPのみ。3.7/3.8は lpoke st,12,下位 : lpoke st,16,上位
; lpLogFont : LOGFONTW* (+20, 8byte) varptr(st)+20 を基点に操作(8byte:入れ子/配列)
; iPointSize : INT (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; Flags : CHOOSEFONT_FLAGS (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; rgbColors : COLORREF (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; lCustData : LPARAM (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; lpfnHook : LPCFHOOKPROC (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; lpTemplateName : LPWSTR (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; hInstance : HINSTANCE (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; lpszStyle : LPWSTR (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; nFontType : CHOOSEFONT_FONT_TYPE (+80, 2byte) wpoke st,80,値 / 値 = wpeek(st,80)
; ___MISSING_ALIGNMENT__ : WORD (+82, 2byte) wpoke st,82,値 / 値 = wpeek(st,82)
; nSizeMin : INT (+84, 4byte) st.21 = 値 / 値 = st.21 (lpoke/lpeek も可)
; nSizeMax : INT (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global CHOOSEFONTW, pack=1
#field int lStructSize
#field intptr hwndOwner
#field intptr hDC
#field intptr lpLogFont
#field int iPointSize
#field int Flags
#field int rgbColors
#field intptr lCustData
#field intptr lpfnHook
#field intptr lpTemplateName
#field intptr hInstance
#field intptr lpszStyle
#field short nFontType
#field short ___MISSING_ALIGNMENT__
#field int nSizeMin
#field int nSizeMax
#endstruct
stdim st, CHOOSEFONTW ; NSTRUCT 変数を確保
st->lStructSize = 100
mes "lStructSize=" + st->lStructSize