#include
HINSTANCE g_hInstance=0;//全局窗口句柄变量
/*
2 窗口处理函数(用户自定义 处理消息)
*/
LRESULT CALLBACK WndProc(HWND hWnd,UINT msgID,
WPARAM wParam, LPARAM lParam)
{
switch(msgID)
{
case WM_PAINT:
break;
case WM_DESTROY:
//使得GetMessage返回0
PostQuitMessage(0);
break;
}
//给各种消息做默认处理
return DefWindowProc(hWnd,msgID,wParam,lParam);
}
/*
3 注册窗口类
*/
void Register(LPSTR lpClassName,WNDPROC wndPrco)
{
//注册窗口的结构体
WNDCLASSEX wce={0};
//cbSize WNDCLASSEX的大小
wce.cbSize=sizeof(wce);
/*
windows程序为每一个窗口设计类管理一个WNDCLASS结构.
在应用程序注册一个窗口类的时候,可以让windows分配一定字节空间的内存,
这部分内存成为类的附件内存,有属于这个窗口类的所有窗口共享,
类附件内存信息用于存储窗口类的附加信息。windows系统将这部分内存初始化为0,
因此我们经常设置此参数为0.
*/
wce.cbClsExtra=0;
/*
windows程序为每一个窗口管理一个内部数据结构,在注册窗口类的时候,
系统可以为每一个窗口分配一定的字节数的附加内存空间,称为窗口附件内存。
应用程序可使用这部分内存存储窗口特有的数据,
windows系统把这部分内存初始化为0.
*/
wce.cbWndExtra=0;
//主窗口的背景颜色的设置
wce.hbrBackground=CreateSolidBrush(RGB(220,200,220));
//光标句柄
wce.hCursor=NULL;
/*
hIconSm是窗口标题栏的图标,hIcon是应用程序的图标
*/
//图标的句柄
wce.hIcon=NULL;
wce.hIconSm=NULL;
//全局变量句柄的赋值
wce.hInstance=g_hInstance;
//消息处理的过程
wce.lpfnWndProc=WndProc;
//窗口类的名称
wce.lpszClassName=lpClassName;
//窗口菜单资源名称
wce.lpszMenuName=NULL;
//窗口的风格
wce.style=CS_HREDRAW|CS_VREDRAW;
//该函数为随后在调用Createwindow函数和CreatewindowEx函数中使用的窗口注册一个窗口类。
RegisterClassEx(&wce);
}
/*
4 创建窗口
*/
HWND CreateMain(LPSTR lpClassName,LPSTR lpWndName)
{
//创建窗口函数
HWND hWnd=CreateWindowEx(0,lpClassName,lpWndName,WS_OVERLAPPEDWINDOW,
100,100,700,500,NULL,NULL,g_hInstance,NULL);
return hWnd;
}
/*
5 显示窗口
*/
void Display(HWND hWnd)
{
//显示窗口
ShowWindow(hWnd,SW_SHOW);
//更新操作
UpdateWindow(hWnd);
}
/*
6 消息循环
*/
void Message()
{
MSG nMsg={0};
while(GetMessage(&nMsg,NULL,0,0))
{
TranslateMessage(&nMsg);
DispatchMessage(&nMsg);
}
}
/*
1 WinMain函数
*/
int CALLBACK WinMain(HINSTANCE hIns,HINSTANCE hPreIns,
LPSTR lpCmdLine,int nCmdShow)
{
//当前句柄的一个实例
g_hInstance=hIns;
//注册窗口类
Register("Main",WndProc);
//创建窗口
HWND hWnd=CreateMain("Main","window");
//显示窗口
Display(hWnd);
//消息循环
Message();
}