#include <windows.h>
//创建窗口程序的步骤:
//1.创建winMain()主函数
//2.设计窗口
//3.注册窗口
//4.创建窗口
//5.显示窗口
LRESULT CALLBACK WndProc(HWND hwnd,
UINT Message, //消息
WPARAM wParam, //消息参数
LPARAM lParam) {//消息参数
switch(Message) {
case WM_DESTROY: {//当用户关闭窗口,窗口销毁,程序需结束, 发退出消息,以退出消息循环
PostQuitMessage(0);
break;
}
default:
return DefWindowProc(hwnd, Message, wParam, lParam);
}
return 0;
}
//1.创建winMain()主函数
/* WINAPI 函数修饰符 被称为栈的数据结构 用来支持参数传递 */
int WINAPI WinMain(HINSTANCE hInstance,//该程序当前运行实例的句柄
HINSTANCE hPrevInstance, //当前实例的前一个实例的句柄
LPSTR lpCmdLine, //是一个以空终止的字符串 ,指定转递给应用程序的命令行参数
int nCmdShow//指定程序的窗口应该如何展示
) {
//2.设计窗口
WNDCLASSEX wc;//窗口属性
memset(&wc,0,sizeof(wc));//初始化结构体
wc.cbSize = sizeof(WNDCLASSEX);//赋值结构体大小
wc.lpfnWndProc = WndProc; /* 窗口处理函数的指针,用来发送消息,回调函数 */
wc.hInstance = hInstance;//实例句柄
wc.hCursor = LoadCursor(NULL, IDC_ARROW);//窗口类的鼠标样例,为鼠标样例资源的句柄
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);//窗口类的背景刷,为背景刷句柄
wc.lpszClassName = "WindowClass";//指向窗口类的指针
//3.注册窗口
if(!RegisterClassEx(&wc)) {
MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return 0;
}
//4.创建窗口 创建成功后返回值为窗口句柄类型
HWND hwnd;
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Caption",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, /* x */
CW_USEDEFAULT, /* y */
640, /* 宽*/
480, /* 高*/
NULL,//窗口的父窗口句柄
NULL,//窗口的菜单句柄
hInstance,//应用程序实例句柄
NULL//窗口创建时附加参数
);
if(hwnd == NULL) {
MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return 0;
}
//5.显示窗口
MSG msg;//所有消息的临时位置
while(GetMessage(&msg, NULL, 0, 0) > 0) {
TranslateMessage(&msg);//消息转化
DispatchMessage(&msg); //消息派遣,把 TranslateMessage转换的消息发送到窗口的消息处理函数
//此函数在窗口注册时已经指定
}
return msg.wParam;//指定应用程序退出
}