CHOOSEFONTW
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| lStructSize | DWORD | 4 | +0 | +0 | 構造体の長さ (バイト単位)。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| hwndOwner | HWND | 8/4 | +4 | +4 | ダイアログ ボックスを所有するウィンドウへのハンドル。このメンバーには任意の有効なウィンドウ ハンドルを指定できます。ダイアログ ボックスに所有者がない場合は NULL を指定できます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| hDC | HDC | 8/4 | +12 | +8 | このメンバーは ChooseFont 関数では無視されます。 Windows Vista および Windows XP/2000: ダイアログ ボックスにフォントを一覧表示するプリンターの、デバイス コンテキストまたは情報コンテキストへのハンドルです。このメンバーは、Flags メンバーに CF_PRINTERFONTS フラグまたは CF_BOTH フラグが指定されている場合にのみ使用されます。それ以外の場合、このメンバーは無視されます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| lpLogFont | LOGFONTW* | 8/4 | +20 | +12 | LOGFONT 構造体へのポインター。Flags メンバーに CF_INITTOLOGFONTSTRUCT フラグを設定し、他のメンバーを初期化しておくと、ChooseFont 関数は LOGFONT のメンバーに一致するフォントでダイアログ ボックスを初期化します。ユーザーが OK ボタンをクリックすると、ChooseFont はユーザーの選択に基づいて LOGFONT 構造体のメンバーを設定します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| iPointSize | INT | 4 | +28 | +16 | 選択されたフォントのサイズ (1/10 ポイント単位)。ChooseFont 関数は、ユーザーがダイアログ ボックスを閉じた後にこの値を設定します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Flags | CHOOSEFONT_FLAGS | 4 | +32 | +20 | Font ダイアログ ボックスの初期化に使用できるビット フラグのセット。ダイアログ ボックスから制御が戻るときには、ユーザーの入力を示すようにこれらのフラグが設定されます。このメンバーには、次の値の 1 つ以上を指定できます。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| rgbColors | COLORREF | 4 | +36 | +24 | CF_EFFECTS フラグが設定されている場合、rgbColors は初期の文字色を指定します。ChooseFont が正常に戻ると、このメンバーにはユーザーが選択した文字色の RGB 値が格納されます。COLORREF のカラー値を作成するには、RGB マクロを使用します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| lCustData | LPARAM | 8/4 | +40 | +28 | lpfnHook メンバーで識別されるフック プロシージャにシステムが渡す、アプリケーション定義のデータ。システムがフック プロシージャに WM_INITDIALOG メッセージを送信するとき、そのメッセージの lParam パラメーターは、ダイアログ ボックスの作成時に指定された CHOOSEFONT 構造体へのポインターです。フック プロシージャはこのポインターを使用して lCustData の値を取得できます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| lpfnHook | LPCFHOOKPROC | 8/4 | +48 | +32 | ダイアログ ボックス宛てのメッセージを処理できる CFHookProc フック プロシージャへのポインター。このメンバーは、Flags メンバーに CF_ENABLEHOOK フラグが設定されていない限り無視されます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| lpTemplateName | LPWSTR | 8/4 | +56 | +36 | hInstance メンバーで識別されるモジュール内にある、ダイアログ ボックス テンプレート リソースの名前。このテンプレートは、標準のダイアログ ボックス テンプレートの代わりに使用されます。番号付きのダイアログ ボックス リソースの場合、lpTemplateName には MAKEINTRESOURCE マクロが返す値を指定できます。このメンバーは、Flags メンバーに CF_ENABLETEMPLATE フラグが設定されていない限り無視されます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| hInstance | HINSTANCE | 8/4 | +64 | +40 | Flags メンバーに CF_ENABLETEMPLATEHANDLE フラグが設定されている場合、hInstance はダイアログ ボックス テンプレートを格納したメモリ オブジェクトへのハンドルです。CF_ENABLETEMPLATE フラグが設定されている場合、hInstance は lpTemplateName メンバーで指定された名前のダイアログ ボックス テンプレートを含むモジュールへのハンドルです。CF_ENABLETEMPLATEHANDLE と CF_ENABLETEMPLATE のどちらも設定されていない場合、このメンバーは無視されます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| lpszStyle | LPWSTR | 8/4 | +72 | +44 | スタイル データ。CF_USESTYLE フラグが指定されている場合、ChooseFont はこのバッファー内のデータを使用して フォント スタイル コンボ ボックスを初期化します。ユーザーがダイアログ ボックスを閉じると、ChooseFont は フォント スタイル コンボ ボックス内の文字列をこのバッファーにコピーします。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| nFontType | CHOOSEFONT_FONT_TYPE | 2 | +80 | +48 | ChooseFont から制御が戻るときに選択されているフォントの種類。このメンバーには、次の値の 1 つ以上を指定できます。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ___MISSING_ALIGNMENT__ | WORD | 2 | +82 | +50 | 構造体のアライメント調整用の予約WORD。使用しない。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| nSizeMin | INT | 4 | +84 | +52 | ユーザーが選択できる最小のポイント サイズ。ChooseFont は、CF_LIMITSIZE フラグが指定されている場合にのみこのメンバーを認識します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| nSizeMax | INT | 4 | +88 | +56 | ユーザーが選択できる最大のポイント サイズ。ChooseFont は、CF_LIMITSIZE フラグが指定されている場合にのみこのメンバーを認識します。 |
公式ドキュメント
ChooseFont 関数が Font ダイアログ ボックスの初期化に使用する情報を格納します。ユーザーがダイアログ ボックスを閉じると、システムはユーザーの選択に関する情報をこの構造体に返します。
解説(Remarks)
commdlg.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいてこの関数の ANSI 版または Unicode 版を自動的に選択するエイリアスとして CHOOSEFONT を定義しています。エンコーディングに依存しないエイリアスと、エンコーディングに依存するコードを混在させて使用すると、不一致が生じてコンパイル エラーや実行時エラーの原因となることがあります。詳細については、関数プロトタイプの規則を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#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