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

WNDCLASSW

構造体
サイズx64: 72 バイト / x86: 40 バイト

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

フィールド

フィールドサイズx64x86説明
styleWNDCLASS_STYLES4+0+0クラス スタイル。このメンバーには、クラス スタイルの任意の組み合わせを指定できます。
lpfnWndProcWNDPROC8/4+8+4ウィンドウ プロシージャへのポインター。ウィンドウ プロシージャを呼び出すには、CallWindowProc 関数を使用する必要があります。詳細については、WindowProc を参照してください。
cbClsExtraINT4+16+8ウィンドウ クラス構造体に続けて割り当てる追加のバイト数。システムはこれらのバイトを 0 で初期化します。
cbWndExtraINT4+20+12ウィンドウ インスタンスに続けて割り当てる追加のバイト数。システムはこれらのバイトを 0 で初期化します。リソース ファイル内の CLASS ディレクティブを使用して作成されたダイアログ ボックスを、アプリケーションが WNDCLASS で登録する場合は、このメンバーに DLGWINDOWEXTRA を設定する必要があります。
hInstanceHINSTANCE8/4+24+16このクラスのウィンドウ プロシージャを含むインスタンスへのハンドル。
hIconHICON8/4+32+20クラス アイコンへのハンドル。このメンバーはアイコン リソースへのハンドルでなければなりません。このメンバーが NULL の場合、システムが既定のアイコンを提供します。
hCursorHCURSOR8/4+40+24クラス カーソルへのハンドル。このメンバーはカーソル リソースへのハンドルでなければなりません。このメンバーが NULL の場合、アプリケーションはマウスが自身のウィンドウ内に移動するたびに、カーソルの形状を明示的に設定する必要があります。
hbrBackgroundHBRUSH8/4+48+28

クラスの背景ブラシへのハンドル。このメンバーには、背景の描画に使用する物理ブラシへのハンドル、または色の値を指定できます。色の値は、次の標準システム カラーのいずれかでなければなりません (選択した色に値 1 を加算する必要があります)。色の値を指定する場合は、次のいずれかの HBRUSH 型に変換する必要があります。

UnregisterClass によってクラスが登録解除されると、システムはクラスの背景ブラシを自動的に削除します。アプリケーションはこれらのブラシを削除しないでください。

このメンバーが NULL の場合、アプリケーションはクライアント領域の描画を要求されるたびに、自身で背景を描画する必要があります。背景を描画する必要があるかどうかを判断するには、アプリケーションは WM_ERASEBKGND メッセージを処理するか、BeginPaint 関数によって設定される PAINTSTRUCT 構造体の fErase メンバーを調べます。

lpszMenuNameLPWSTR8/4+56+32リソース ファイルに記述されているとおりの、クラス メニューのリソース名。メニューの識別に整数を使用する場合は、MAKEINTRESOURCE マクロを使用します。このメンバーが NULL の場合、このクラスに属するウィンドウには既定のメニューがありません。
lpszClassNameLPWSTR8/4+64+36

null で終わる文字列へのポインター、またはアトムです。このパラメーターがアトムの場合は、事前に RegisterClass または RegisterClassEx 関数を呼び出して作成されたクラス アトムでなければなりません。アトムは lpszClassName の下位ワードに配置し、上位ワードは 0 でなければなりません。

lpszClassName が文字列の場合は、ウィンドウ クラス名を指定します。クラス名には、RegisterClass または RegisterClassEx で登録された任意の名前、または定義済みのコントロール クラス名を指定できます。

lpszClassName の最大長は 256 です。lpszClassName が最大長を超える場合、RegisterClass 関数は失敗します。

公式ドキュメント

RegisterClass 関数によって登録されるウィンドウ クラスの属性を格納します。

この構造体は、RegisterClassEx 関数と共に使用される WNDCLASSEX 構造体に置き換えられました。ウィンドウ クラスに関連付ける小さいアイコンを設定する必要がない場合は、引き続き WNDCLASSRegisterClass を使用できます。

解説(Remarks)

メモ

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

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

各言語での定義

#include <windows.h>

// WNDCLASSW  (x64 72 / x86 40 バイト)
typedef struct WNDCLASSW {
    WNDCLASS_STYLES style;
    WNDPROC lpfnWndProc;
    INT cbClsExtra;
    INT cbWndExtra;
    HINSTANCE hInstance;
    HICON hIcon;
    HCURSOR hCursor;
    HBRUSH hbrBackground;
    LPWSTR lpszMenuName;
    LPWSTR lpszClassName;
} WNDCLASSW;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WNDCLASSW
{
    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;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WNDCLASSW
    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
End Structure
import ctypes
from ctypes import wintypes

class WNDCLASSW(ctypes.Structure):
    _fields_ = [
        ("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),
    ]
#[repr(C)]
pub struct WNDCLASSW {
    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,
}
import "golang.org/x/sys/windows"

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

HSP用 定義

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

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

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