当前位置:首页 科普知识 WNDCLASSEX

WNDCLASSEX

发布时间:2023-09-07 06:29:15

WNDCLASSEX是一个窗口,最重要的成员是lpfnWndProc。前缀 lpfn 表示该成员是一个指向函数的长指针。在 Win32中由于内存模式是 FLAT 型,所以没有 near 或 far 的区别。

WNDCLASSEX详细介绍

WNDCLASSEX是一个窗口,最重要的成员是lpfnWndProc。前缀 lpfn 表示该成员是一个指向函数的长指针。在 Win32中由于内存模式是 FLAT 型,所以没有 near 或 far 的区别。

WNDCLASSEX

WNDCLASSEX描述

每一个窗口类必须有一个窗口过程,当 Windows 把属于特定窗口的消息发送给该窗口时,该窗口的窗口类负责处理所有的消息,如键盘消息或鼠标消息。由于窗口过程差不多智能地处理了所有的窗口消息循环,所以您只要在其中加入消息处理过程即可。

WNDCLASSEX结构体原型:

typedef struct WNDCLASSEX {

UINT cbSize;

UINT style;

WNDPROC lpfnWndProc;

int cbClsExtra;

int cbWndExtra;

HINSTANCE hInstance;

HICON hIcon;

HCURSOR hCursor;

HBRUSH hbrBackground;

LPCTSTR lpszMenuName;

LPCTSTR lpszClassName;

HICON hIconSm;

} WNDCLASSEX, *PWNDCLASSEX;

WNDCLASSEX说明

WNDCLASSEX 结构用于注册窗口类

注册实例:

ATOM MyRegisterClass( HINSTANCE hInstance )

{

WNDCLASSEX wcex;

wcex.cbSize = sizeof( WNDCLASSEX );

wcex.style = CS_HREDRAW | CS_VREDRAW;

wcex.lpfnWndProc = (WNDPROC) WndProc;

wcex.cbClsExtra = 0;

wcex.cbWndExtra = 0;

wcex.hInstance = hInstance;

wcex.hIcon = LoadIcon( NULL, IDI_APPLICATION );

wcex.hCursor = LoadCursor( NULL, IDC_ARROW );

wcex.hbrBackground = (HBRUSH) GetStockObject( WHITE_BRUSH );

wcex.lpszMenuName = NULL;

wcex.lpszClassName = "My Class";

wcex.hIconSm = LoadIcon( NULL, IDI_WINLOGO );

return RegisterClassEx( &wcex );

}

WNDCLASSEX参数

1.cbSize:

WNDCLASSEX 的大小。我们可以用sizeof(WNDCLASSEX)来获得准确的值。

2.style:

从这个窗口类派生的窗口具有的风格。您可以用“or”操作符来把几个风格或到一起。

3.lpfnWndProc:

窗口处理函数的指针。

4.cbClsExtra:

指定紧跟在窗口类结构后的附加字节数。

5.cbWndExtra:

指定紧跟在窗口实例的附加字节数。如果一个应用程序在资源中用CLASS伪指令注册一个对话框类时,则必须把这个成员设成DLGWINDOWEXTRA。

6.hInstance:

本模块的实例句柄。

7.hIcon:

图标的句柄。

8.hCursor:

光标的句柄。

WNDCLASSEX

9.hbrBackground:

背景画刷的句柄。

10.lpszMenuName:

指向菜单的指针。

11.lpszClassName:

指向类名称的指针。

12.hIconSm:

和窗口类关联的小图标。如果该值为NULL。则把hIcon中的图标转换成大小合适的小图标。

WNDCLASSEX例子

WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD

LOCAL wc:WNDCLASSEX; create local variables on stack

LOCAL msg:MSG

LOCAL hwnd:HWND mov wc.cbSize,SIZEOF WNDCLASSEX ; fill values in members of wc

mov wc.style, CS_HREDRAW or CS_VREDRAW

mov wc.lpfnWndProc, OFFSET WndProc

mov wc.cbClsExtra,NULL=1

mov wc.cbWndExtra,NULL

push hInstance

pop wc.hInstance

mov wc.hbrBackground,COLOR_WINDOW+1

mov wc.lpszMenuName,NULL

mov wc.lpszClassName,OFFSET ClassName

invoke LoadIcon,NULL,IDI_APPLICATION

mov wc.hIcon,eax

mov wc.hIconSm,eax

invoke LoadCursor,NULL,IDC_ARROW

mov wc.hCursor,eax

invoke RegisterClassEx, addr w ; register our window class

invoke CreateWindowEx,NULL,

ADDR ClassName,

ADDR AppName,

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT,

CW_USEDEFAULT,

CW_USEDEFAULT,

CW_USEDEFAULT,

NULL,

NULL,

hInst,

NULL

mov hwnd,eax

invoke ShowWindow, hwnd,CmdShow ; display our window on desktop

invoke UpdateWindow, hwnd ; refresh the client area

在FirstWindow程序中,注册窗口类的代码是:

local @stWndClass:WNDCLASSEX ;定义一个WNDCLASSEX结构

invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass

invoke LoadCursor,0,IDC_ARROW

mov @stWndClass.hCursor,eax

push hInstance

pop @stWndClass.hInstance

mov @stWndClass.cbSize,sizeof WNDCLASSEX

mov @stWndClass.style,CS_HREDRAW or CS_VREDRAW

WNDCLASSEX

mov @stWndClass.lpfnWndProc,offset _ProcWinMain

mov @stWndClass.hbrBackground,COLOR_WINDOW + 1

mov @stWndClass.lpszClassName,offset szClassName

invoke RegisterClassEx,addr @stWndClass

温馨提示:
本文【WNDCLASSEX】由作者 爱百科 转载提供。 该文观点仅代表作者本人, 自学教育网 信息发布平台,仅提供信息存储空间服务, 若存在侵权问题,请及时联系管理员或作者进行删除。
(c)2008-2025 自学教育网 All Rights Reserved 汕头市灵创科技有限公司
粤ICP备2024240640号-6