Win32 API 日本語リファレンス
ホームUI.WindowsAndMessaging › WNDCLASSEXA

WNDCLASSEXA

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

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

フィールド

フィールドサイズx64x86説明
cbSizeDWORD4+0+0この構造体のサイズ(バイト数)である。RegisterClassEx 呼び出し前に sizeof(WNDCLASSEX) を設定する。
styleWNDCLASS_STYLES4+4+4クラススタイルを指定する(CS_HREDRAW など)。
lpfnWndProcWNDPROC8/4+8+8このクラスのウィンドウプロシージャへのポインタである。
cbClsExtraINT4+16+12クラス構造体の後に確保する追加バイト数である。
cbWndExtraINT4+20+16各ウィンドウインスタンスの後に確保する追加バイト数である。
hInstanceHINSTANCE8/4+24+20このクラスのウィンドウプロシージャを含むインスタンスのハンドルである。
hIconHICON8/4+32+24クラスのアイコンへのハンドルである。NULL の場合は既定のアイコンが使われる。
hCursorHCURSOR8/4+40+28クラスのカーソルへのハンドルである。NULL の場合はアプリケーションがカーソルを明示的に設定する必要がある。
hbrBackgroundHBRUSH8/4+48+32背景ブラシのハンドル、またはシステムカラー値+1 を指定する。NULL の場合は背景を自前で描画する。
lpszMenuNameLPSTR8/4+56+36クラスの既定メニューのリソース名(ANSI 文字列)へのポインタである。NULL の場合は既定メニューを持たない。
lpszClassNameLPSTR8/4+64+40ウィンドウクラス名(ANSI 文字列)へのポインタである。
hIconSmHICON8/4+72+44クラスの小さいアイコンへのハンドルである。NULL の場合は hIcon から縮小して使われる。

各言語での定義

#include <windows.h>

// WNDCLASSEXA  (x64 80 / x86 48 バイト)
typedef struct WNDCLASSEXA {
    DWORD cbSize;
    WNDCLASS_STYLES style;
    WNDPROC lpfnWndProc;
    INT cbClsExtra;
    INT cbWndExtra;
    HINSTANCE hInstance;
    HICON hIcon;
    HCURSOR hCursor;
    HBRUSH hbrBackground;
    LPSTR lpszMenuName;
    LPSTR lpszClassName;
    HICON hIconSm;
} WNDCLASSEXA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WNDCLASSEXA
{
    public uint cbSize;
    public uint style;
    public IntPtr lpfnWndProc;
    public int cbClsExtra;
    public int cbWndExtra;
    public IntPtr hInstance;
    public IntPtr hIcon;
    public IntPtr hCursor;
    public IntPtr hbrBackground;
    public IntPtr lpszMenuName;
    public IntPtr lpszClassName;
    public IntPtr hIconSm;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WNDCLASSEXA
    Public cbSize As UInteger
    Public style As UInteger
    Public lpfnWndProc As IntPtr
    Public cbClsExtra As Integer
    Public cbWndExtra As Integer
    Public hInstance As IntPtr
    Public hIcon As IntPtr
    Public hCursor As IntPtr
    Public hbrBackground As IntPtr
    Public lpszMenuName As IntPtr
    Public lpszClassName As IntPtr
    Public hIconSm As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class WNDCLASSEXA(ctypes.Structure):
    _fields_ = [
        ("cbSize", wintypes.DWORD),
        ("style", wintypes.DWORD),
        ("lpfnWndProc", ctypes.c_void_p),
        ("cbClsExtra", ctypes.c_int),
        ("cbWndExtra", ctypes.c_int),
        ("hInstance", ctypes.c_void_p),
        ("hIcon", ctypes.c_void_p),
        ("hCursor", ctypes.c_void_p),
        ("hbrBackground", ctypes.c_void_p),
        ("lpszMenuName", ctypes.c_void_p),
        ("lpszClassName", ctypes.c_void_p),
        ("hIconSm", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct WNDCLASSEXA {
    pub cbSize: u32,
    pub style: u32,
    pub lpfnWndProc: *mut core::ffi::c_void,
    pub cbClsExtra: i32,
    pub cbWndExtra: i32,
    pub hInstance: *mut core::ffi::c_void,
    pub hIcon: *mut core::ffi::c_void,
    pub hCursor: *mut core::ffi::c_void,
    pub hbrBackground: *mut core::ffi::c_void,
    pub lpszMenuName: *mut core::ffi::c_void,
    pub lpszClassName: *mut core::ffi::c_void,
    pub hIconSm: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type WNDCLASSEXA struct {
	cbSize uint32
	style uint32
	lpfnWndProc uintptr
	cbClsExtra int32
	cbWndExtra int32
	hInstance uintptr
	hIcon uintptr
	hCursor uintptr
	hbrBackground uintptr
	lpszMenuName uintptr
	lpszClassName uintptr
	hIconSm uintptr
}
type
  WNDCLASSEXA = record
    cbSize: DWORD;
    style: DWORD;
    lpfnWndProc: Pointer;
    cbClsExtra: Integer;
    cbWndExtra: Integer;
    hInstance: Pointer;
    hIcon: Pointer;
    hCursor: Pointer;
    hbrBackground: Pointer;
    lpszMenuName: Pointer;
    lpszClassName: Pointer;
    hIconSm: Pointer;
  end;
const WNDCLASSEXA = extern struct {
    cbSize: u32,
    style: u32,
    lpfnWndProc: ?*anyopaque,
    cbClsExtra: i32,
    cbWndExtra: i32,
    hInstance: ?*anyopaque,
    hIcon: ?*anyopaque,
    hCursor: ?*anyopaque,
    hbrBackground: ?*anyopaque,
    lpszMenuName: ?*anyopaque,
    lpszClassName: ?*anyopaque,
    hIconSm: ?*anyopaque,
};
type
  WNDCLASSEXA {.bycopy.} = object
    cbSize: uint32
    style: uint32
    lpfnWndProc: pointer
    cbClsExtra: int32
    cbWndExtra: int32
    hInstance: pointer
    hIcon: pointer
    hCursor: pointer
    hbrBackground: pointer
    lpszMenuName: pointer
    lpszClassName: pointer
    hIconSm: pointer
struct WNDCLASSEXA
{
    uint cbSize;
    uint style;
    void* lpfnWndProc;
    int cbClsExtra;
    int cbWndExtra;
    void* hInstance;
    void* hIcon;
    void* hCursor;
    void* hbrBackground;
    void* lpszMenuName;
    void* lpszClassName;
    void* hIconSm;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WNDCLASSEXA サイズ: 48 バイト(x86)
dim st, 12    ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; style : WNDCLASS_STYLES (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; lpfnWndProc : WNDPROC (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; cbClsExtra : INT (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; cbWndExtra : INT (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; hInstance : HINSTANCE (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; hIcon : HICON (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; hCursor : HCURSOR (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; hbrBackground : HBRUSH (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; lpszMenuName : LPSTR (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; lpszClassName : LPSTR (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; hIconSm : HICON (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WNDCLASSEXA サイズ: 80 バイト(x64)
dim st, 20    ; 4byte整数×20(構造体サイズ 80 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; style : WNDCLASS_STYLES (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; lpfnWndProc : WNDPROC (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; cbClsExtra : INT (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; cbWndExtra : INT (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; hInstance : HINSTANCE (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; hIcon : HICON (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; hCursor : HCURSOR (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; hbrBackground : HBRUSH (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; lpszMenuName : LPSTR (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; lpszClassName : LPSTR (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; hIconSm : HICON (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WNDCLASSEXA
    #field int cbSize
    #field int style
    #field intptr lpfnWndProc
    #field int cbClsExtra
    #field int cbWndExtra
    #field intptr hInstance
    #field intptr hIcon
    #field intptr hCursor
    #field intptr hbrBackground
    #field intptr lpszMenuName
    #field intptr lpszClassName
    #field intptr hIconSm
#endstruct

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