请输入您要查询的百科知识:

 

词条 WNDCLASSEX
释义

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

描述

WNDCLASSEX 中最重要的成员莫过于lpfnWndProc了。前缀 lpfn 表示该成员是一个指向函数的长指针。在 Win32中由于内存模式是 FLAT 型,所以没有 near 或 far 的区别。每一个窗口类必须有一个窗口过程,当 Windows 把属于特定窗口的消息发送给该窗口时,该窗口的窗口类负责处理所有的消息,如键盘消息或鼠标消息。由于窗口过程差不多智能地处理了所有的窗口消息循环,所以您只要在其中加入消息处理过程即可。

结构体原型:

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 结构用于注册窗口类

注册实例:

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 );

}

参数

cbSize:

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

style:

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

lpfnWndProc:

窗口处理函数的指针。

cbClsExtra:

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

cbWndExtra:

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

hInstance:

本模块的事例句柄。

hIcon:

图标的句柄。

hCursor:

光标的句柄。

hbrBackground:

背景画刷的句柄。

lpszMenuName:

指向菜单的指针。

lpszClassName:

指向类名称的指针。

hIconSm:

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

例子

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

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 wc ; 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

mov @stWndClass.lpfnWndProc,offset _ProcWinMain

mov @stWndClass.hbrBackground,COLOR_WINDOW + 1

mov @stWndClass.lpszClassName,offset szClassName

invoke RegisterClassEx,addr @stWndClass

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/2/13 11:57:28