#include <windows.h> //回调函数,消息处理函数 LRESULT CALLBACK WndProc(HWND hwnd, //窗口句柄 UINT Message,//消息 WPARAM wParam,//消息参数 LPARAM lParam) {//消息参数 switch(Message) { /* Upon destruction, tell the main thread to stop */ case WM_DESTROY: {//当用户关闭窗口,窗口销毁,程序需结束,发退出消息,以退出消息循环 PostQuitMessage(0); break; } /* All other messages (a lot of them) are processed using default procedures */ default: return DefWindowProc(hwnd, Message, wParam, lParam); } return 0; } //1.创建WinMain()主函数 //WINAPI 函数修饰符 被称为栈的数据结构 用来支持参数传递 int WINAPI WinMain(HINSTANCE hInstance,//该程序当前运行实例的句柄 HINSTANCE hPrevInstance,//当前实例的前一个实例的句柄 LPSTR lpCmdLine,//是一个以空终止的字符串,指定传递给应用程序的命令行参数 int nCmdShow) {//指定程序的窗口应该如何显示 //设计窗口 WNDCLASSEX wc; /* 窗框内属性 知识点1*/ HWND hwnd; /* 句柄,或指向窗口的指针 */ MSG msg; /* 所有消息的临时位置*/ memset(&wc,0,sizeof(wc));//初始化结构体 wc.cbSize = sizeof(WNDCLASSEX);//赋值结构体大小 wc.lpfnWndProc = WndProc; /* 窗口处理函数的指针,用来发送信息,回调函数 */ wc.hInstance = hInstance;//实例句柄 wc.hCursor = LoadCursor(NULL, IDC_ARROW);//窗口类的鼠标样式,为鼠标样式资源的句柄 /* White, COLOR_WINDOW is just a #define for a system color, try Ctrl+Clicking it */ wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);//窗口类的背景刷,为背景刷句柄 wc.lpszClassName = "WindowClass";//指向窗口类的指针 wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); /* Load a standard icon */ wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); /* use the name "A" to use the project icon */ // 3、注册窗口 if(!RegisterClassEx(&wc)) { MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK); return 0; } //4.创建窗口 //创建成功后返回值为窗口句柄类型 hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,//窗口的扩展风格 知识点2 "WindowClass",//指定窗口类的名称,设计窗口类为laszClassName成员指定的名称 "第一个窗口",//指定窗口类的名字。窗口样式指定了标题栏,窗口名字将显示在标题栏上 WS_VISIBLE|WS_OVERLAPPEDWINDOW,//窗口的及基本风格 知识点2 CW_USEDEFAULT, /* x */ CW_USEDEFAULT, /* y */ 640, /* 宽 */ 480, /* 高 */ NULL,//窗口的父窗口句柄 NULL,//窗口的菜单句柄 hInstance,//应用程序实例句柄 NULL);//窗口创建时附加参数 //5.显示窗口 if(hwnd == NULL) { MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK); return 0; } /* This is the heart of our program where all input is processed and sent to WndProc. Note that GetMessage blocks code flow until it receives something, so this loop will not produce unreasonably high CPU usage */ while(GetMessage(&msg, NULL, 0, 0) > 0) { /*如果没有接受到错误信息,执行下面函数语句 */ TranslateMessage(&msg); /* 消息转化 */ DispatchMessage(&msg); /* 消息派遣,把TranslateMessage转化的消息发送到窗口的消息处理的函数 */ //此函数在窗口注册时已经指定 } return msg.wParam;//指定应用程序退出 }
标签:wc,框架,句柄,程序,return,hwnd,窗口,NULL From: https://www.cnblogs.com/hanxuyao/p/18172378