文章目录
一、导入头文件
二、桌面程序入口函数
三、注册窗口
四、创建窗口
五、显示窗口
六、完整代码示例
七、相关资源
基于 【OpenGL】一、Visual Studio 2019 创建 Windows 桌面程序 ( Visual Studio Installer 安装 C++ 桌面开发库 | 创建桌面程序 ) 博客中创建的 Windows 桌面程序继续向下讲解 , Visual Studio 自动生成了空白的桌面程序 , OpenGL 系列开发基于该桌面程序进行 ;
本篇博客简单介绍下该桌面初始化的操作 , 注册桌面窗口 , 创建桌面窗口 , 显示桌面窗口 ;
一、导入头文件
Windows 窗口程序需要导入 windows.h 头文件 ;
// Windows 头文件 #include <windows.h>
下面的代码时 Visual Studio 创建桌面程序时 , 自动生成的头文件 , 其中包含了 windows.h 头文件 ;
// header.h: 标准系统包含文件的包含文件, // 或特定于项目的包含文件 // #pragma once #include "targetver.h" #define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的内容 // Windows 头文件 #include <windows.h> // C 运行时头文件 #include <stdlib.h> #include <malloc.h> #include <memory.h> #include <tchar.h>
二、桌面程序入口函数
Windows 桌面程序的入口 是 wWinMain 函数 ,
该函数相当于命令行程序中的 void main() 函数 ;
完整的 wWinMain 函数格式 :
int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
三、注册窗口
使用 WNDCLASSEXW 结构体注册窗口 ;
WNDCLASSEXW 结构体代码如下 :
typedef struct tagWNDCLASSEXW { UINT cbSize; /* Win 3.x */ UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCWSTR lpszMenuName; LPCWSTR lpszClassName; /* Win 4.0 */ HICON hIconSm; } WNDCLASSEXW, *PWNDCLASSEXW, NEAR *NPWNDCLASSEXW, FAR *LPWNDCLASSEXW;
下面是该结构体各个字段的含义 :
style : 窗口风格 ;
lpfnWndProc : 设置消息响应函数 , 如响应鼠标 , 键盘事件 ;
cbWndExtra : 窗口是否需要额外空间 ;
hInstance : 窗口实体 , 通过桌面程序入口函数传入 ;
hIcon : 生成的程序在文件夹中的样式 , 可执行程序的图标
hCursor : 设置鼠标光标样式 ;
hbrBackground : 设置背景 ;
lpszMenuName : 设置菜单 ;
lpszClassName : 设置窗口标识 ;
窗口注册代码示例 : 下面的代码时 Visual Studio 自动身
// // 函数: MyRegisterClass() // // 目标: 注册窗口类。 // ATOM MyRegisterClass(HINSTANCE hInstance) { // 注册窗口的结构体 WNDCLASSEXW wcex; // 设置结构体的大小 wcex.cbSize = sizeof(WNDCLASSEX); // 窗口风格 , CS 是 Class Style 缩写 , VREDRAW 垂直重绘 , HREDRAW 水平重绘 wcex.style = CS_HREDRAW | CS_VREDRAW; // 消息响应函数 , 鼠标点击窗口 , 或打字字后的回调函数 wcex.lpfnWndProc = WndProc; // 不需要额外的空间 wcex.cbClsExtra = 0; // 不需要额外的空间 wcex.cbWndExtra = 0; // 设置程序的实例, 通过桌面程序入口函数传入 wcex.hInstance = hInstance; // 生成的程序在文件夹中的样式 , 可执行程序的图标 wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_OPENGL)); // 设置鼠标光标样式 wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); // 设置背景 wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); // 菜单 wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_OPENGL); // 窗口的唯一标识符 wcex.lpszClassName = szWindowClass; // 设置窗口运行后显示在右上角的图标 wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); // 设置完上述参数后 , 最后调用该方法注册窗口 return RegisterClassExW(&wcex); }