wndclass

结构WNDCLASS包含一个窗口类的全部信息,也是Windows编程中使用的基本数据结构之一,应用程序通过定义一个窗口类确定窗口的属性,定义如下: 

typedef struct _WNDCLASS { 
UINT style; 
WNDPROC lpfnWndProc; 
int cbClsExtra; 
int cbWndExtra; 
HINSTANCE hInstance; 
HICON hIcon; 
HCURSOR hCursor; 
HBRUSH hbrBackground; 
LPCTSTR lpszMenuName; 
LPCTSTR lpszClassName; 
} WNDCLASS, *PWNDCLASS; 
下面是<>第三章的例子: 
#include 
//包含应用程序中数据类型和数据结构的定义 
long CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); 
//窗口说明 
//WinMain函数是所有Windows应用程序的入口,类似c语言中的main函数 其功能是完成//一系列的定义和初始化,并产生消息循环 
/* WinMain函数实现以下功能:注册窗口类,建立窗口及执行其他必要的初始化工作;进入消息循环,根据从应用程序消息队列接受的消息,调用相应的处理过程;当消息循环检 
测到WM_QUIT消息是终止程序运行 
WinMain函数有三个基本部分组成:函数说明、初始化和消息循环*/ 
//函数说明 
int WINAPI WinMain( 
HINSTANCE hInstance, // handle to current instance 
HINSTANCE hPrevInstance, // handle to previous instance 
LPSTR lpCmdLine, // command line 
int nCmdShow // show state 

//初始化 
//初始化包括窗口类的定义、注册、创建窗口实例和显示窗口四部分 

HWND hwnd; 
MSG Msg; 
WNDCLASS wndclass; 
char lpszClassName[]="窗口";//窗口类名 
char lpszTitle[]="徐新坡"; //窗口标题名 
//窗口类定义 
//窗口类定义了窗口的形式与功能 窗口类定义通过给窗口类数据结构WNDCLASS赋值完成 
//该数据结构中包含窗口类的各种属性 
wndclass.style =0; // 窗口类型为缺省类型 
wndclass.lpfnWndProc=WndProc; //定义窗口处理函数 
wndclass.cbClsExtra=0; //窗口类无扩展 
wndclass.cbWndExtra=0; //窗口实例无扩展 
wndclass.hInstance=hInstance; //当前实例句柄 
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//窗口的最小化图标为缺省图标 
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); // 窗口采用箭头光标 
wndclass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH)); //窗口背景为白色 
wndclass.lpszMenuName=NULL; //窗口无菜单 
wndclass.lpszClassName=lpszClassName; //窗口类名为“窗口” 
以下是窗口类的注册 Windows系统本身提供部分预定义的窗口类,程序员也可以自定义窗口类// 窗口类必须先注册 后使用 
if(!RegisterClass(&wndclass)) //如果注册失败 发出警告 
{MessageBeep(0); return FALSE;} 
///创建窗口 创建一个窗口的实例由函数CreateWindow()实现 
hwnd=CreateWindow( lpszClassName, //窗口类名 
lpszTitle, //窗口标题名 
WS_OVERLAPPEDWINDOW, //窗口的风格 
CW_USEDEFAULT, 
CW_USEDEFAULT, //窗口左上角坐标值为缺省值 
CW_USEDEFAULT, CW_USEDEFAULT, //窗口的高和宽为缺省值 
NULL, //此窗口无父窗口 
NULL, //此窗口无子菜单 
hInstance, //创建此窗口的应用程序的当前句柄 
NULL //不使用该值 
); 
/显示窗口 
ShowWindow(hwnd,nCmdShow); 
//绘制用户区 
UpdateWindow(hwnd); 
/消息循环 
while(GetMessage(&Msg,NULL,0,0)) 

TranslateMessage(&Msg); 
DispatchMessage(&Msg);} 
return Msg.wParam; //消息循环结束 即程序结束时 将信息返回系统 

/窗口函数 
//窗口函数定义了应用程序对接收到的不同消息的响应,其中包含了应用程序对各种可能接受到的消息的 
//处理过程,时消息处理分支控制语句的集合 
long CALLBACK WndProc( 
HWND hwnd, 
UINT message, 
WPARAM wParam, 
LPARAM lParam 


switch(message) 

case WM_DESTROY: 
PostQuitMessage(0); 
default: //缺省时采用系统消息缺省处理函数 
return DefWindowProc(hwnd,message,wParam,lParam); 

return (0); 




还有网友翻译的MSDN供参考: 
WNDCLASS结构包含了RegisterClass函数注册窗口类时的窗口类属性。这个结构在使用RegisterClassEx函数注册窗口类时被WNDCLASSEX结构所取代。如果不需为窗口类设置小图标 
时,仍然可以使用WNDCLASS和RegisterClass。 
语法: 

typedef struct { 
UINT style; 
WNDPROC lpfnWndProc; 
int cbClsExtra; 
int cbWndExtra; 
HINSTANCE hInstance; 
HICON hIcon; 
HCURSOR hCursor; 
HBRUSH hbrBackground; 
LPCTSTR lpszMenuName; 
LPCTSTR lpszClassName; 
} WNDCLASS, *pWNDCLASS; 
成员: 
style 
描述类风格。该成员可以是“Class Styles”的任意组合。 
lpfnWndProc 
指向窗口过程的指针。必须使用CallWindowProc函数调用窗口过程。 
cbClsExtra 表示窗口类结构之后分配的额外的字节数。系统将该值初始化为0. 
cbWndExtra 表示窗口实例之后分配的额外的字节数。系统将该值初始化为0.如果使用资源文件里的CLASS指令创建对话框,并用WNDCLASS注册该对话框时,cbWndExtra必 
须设置成DLGWNDOWEXTRA。hInstance 包含该类实例的句柄,该实例包含了窗口过程。 
hIcon 类图标的句柄。该成员必须为一个图标资源的句柄。如果hIcon为NULL,系统将提供默认图标。 
hCursor 鼠标指针的句柄。改成员必须为一个指针资源的句柄。如果hCursor为NULL,应用程序必须在指针移入应用程序窗口时显式设置指针类型。 
hbrBackground 背景画刷的句柄。该成员或者是用于绘制背景的物理画刷的句柄,或者是一个颜色值。颜色值必须为如下标准系统颜色值(值1必须加到选定颜色中)。如果 
颜色值给定后,必须将该值转换成如下HBRUSH类型。 
COLOR_BTNFACE 
COLOR_BTNSHADOW 
COLOR_BTNTEXT 
COLOR_CAPTIONTEXT 
COLOR_GRAYTEXT 
COLOR_HIGHLIGHT 
COLOR_HIGHLIGHTTEXT 
COLOR_INACTIVEBORDER 
COLOR_INACTIVECAPTION 
COLOR_MENU 
COLOR_MENUTEXT 
COLOR_SCROLLBAR 
COLOR_WINDOW 
COLOR_WINDOWFRAME 
COLOR_WINDOWTEXT 
当调用UnregisterClass时,系统自动删除背景画刷。应用程序不应删除这些画刷。 
当hbrBackground为NULL时,应用程序必须在绘制客户区域时绘制它自己的背景。为了确定背景是否一定要绘制,应用程序或者可以处理 WM_ERASEBKGND消息,或者测试 
PAINTSTRUCT的fErase成员。PAINTSTRUCT是由BeginPaint函数填充的。 
lpszMenuName 
指向NULL结束的字符串,该字符串描述菜单的资源名,如同在资源文件里显示的名字一样。若使用一个整数标识菜单,可以使用MAKEINTRESOURCE宏。如果lpszMenuName为NULL, 
那么该窗口类的窗口将没有默认菜单。 
lpszClassName 
指向NULL结束的字符串,或者是一个原型(atom)。若该参数是一个原型,它必须是一个有先前调用RegisterClass或者 RegisterClassEx函数产生的类原型。类原型必须作为 
lpszClassName的低字,高字必须为0.若lpszClassName是一个 字符串,它描述了窗口类名。这个类名可以是由RegisterClass或者RegisterClassEx注册的名字,或者是任何预定义 
的控件类名。 
结构信息 
Header 在winuser.h声明,包含windows.h 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值