Win32 API 日本語リファレンス
ホームUI.Controls.Dialogs › CHOOSEFONTA

CHOOSEFONTA

構造体
サイズx64: 92 バイト / x86: 60 バイトパッキング1

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

フィールド

フィールドサイズx64x86説明
lStructSizeDWORD4+0+0この構造体のサイズをバイト単位で指定する。ChooseFontA呼び出し前に設定する。
hwndOwnerHWND8/4+4+4ダイアログを所有する親ウィンドウのハンドル。NULL可。
hDCHDC8/4+12+8プリンタフォント列挙に使うデバイスコンテキストのハンドル。CF_PRINTERFONTS指定時に使用する。
lpLogFontLOGFONTA*8/4+20+12選択結果を受け取るLOGFONTA構造体へのポインタ。初期フォント指定にも使われる。
iPointSizeINT4+28+16選択されたフォントのサイズを1/10ポイント単位で受け取る。
FlagsCHOOSEFONT_FLAGS4+32+20ダイアログの初期化や動作を制御するCF_系フラグの組み合わせ。
rgbColorsCOLORREF4+36+24CF_EFFECTS指定時の文字色。COLORREF形式で入出力に使われる。
lCustDataLPARAM8/4+40+28フックプロシージャに渡されるアプリケーション定義データ。
lpfnHookLPCFHOOKPROC8/4+48+32メッセージを処理するCFHookProcフックプロシージャへのポインタ。CF_ENABLEHOOK時に有効。
lpTemplateNameLPSTR8/4+56+36CF_ENABLETEMPLATE指定時のダイアログテンプレートのリソース名。
hInstanceHINSTANCE8/4+64+40テンプレートやフックを含むモジュールのインスタンスハンドル。
lpszStyleLPSTR8/4+72+44スタイル名を入出力する文字列バッファ。CF_USESTYLE指定時に使われる。
nFontTypeCHOOSEFONT_FONT_TYPE2+80+48選択フォントの種別を示すフラグ。SIMULATED_FONTTYPE等が返る。
___MISSING_ALIGNMENT__WORD2+82+50構造体のアライメント調整用の予約WORD。使用しない。
nSizeMinINT4+84+52CF_LIMITSIZE指定時の選択可能な最小ポイントサイズ。
nSizeMaxINT4+88+56CF_LIMITSIZE指定時の選択可能な最大ポイントサイズ。

各言語での定義

#include <windows.h>

// CHOOSEFONTA  (x64 92 / x86 60 バイト)
#pragma pack(push, 1)
typedef struct CHOOSEFONTA {
    DWORD lStructSize;
    HWND hwndOwner;
    HDC hDC;
    LOGFONTA* lpLogFont;
    INT iPointSize;
    CHOOSEFONT_FLAGS Flags;
    COLORREF rgbColors;
    LPARAM lCustData;
    LPCFHOOKPROC lpfnHook;
    LPSTR lpTemplateName;
    HINSTANCE hInstance;
    LPSTR lpszStyle;
    CHOOSEFONT_FONT_TYPE nFontType;
    WORD ___MISSING_ALIGNMENT__;
    INT nSizeMin;
    INT nSizeMax;
} CHOOSEFONTA;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct CHOOSEFONTA
{
    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 CHOOSEFONTA
    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 Structure
import ctypes
from ctypes import wintypes

class CHOOSEFONTA(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 CHOOSEFONTA {
    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 CHOOSEFONTA 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
  CHOOSEFONTA = 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 CHOOSEFONTA = 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
  CHOOSEFONTA {.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: int32
align(1)
struct CHOOSEFONTA
{
    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 レイアウト)
; CHOOSEFONTA サイズ: 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 : LOGFONTA* (+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 : LPSTR (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; hInstance : HINSTANCE (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; lpszStyle : LPSTR (+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 レイアウト)
; CHOOSEFONTA サイズ: 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 : LOGFONTA* (+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 : LPSTR (+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 : LPSTR (+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 CHOOSEFONTA, 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, CHOOSEFONTA        ; NSTRUCT 変数を確保
st->lStructSize = 100
mes "lStructSize=" + st->lStructSize