【OpenGL】七、桌面窗口搭建 ( 导入头文件 | 桌面程序入口函数 | 注册窗口 | 创建窗口 | 显示窗口 )(一)

简介: 【OpenGL】七、桌面窗口搭建 ( 导入头文件 | 桌面程序入口函数 | 注册窗口 | 创建窗口 | 显示窗口 )(一)

文章目录

一、导入头文件

二、桌面程序入口函数

三、注册窗口

四、创建窗口

五、显示窗口

六、完整代码示例

七、相关资源


基于 【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);
}



目录
相关文章
|
7月前
|
C语言 开发者
[笔记]音视频学习之OpenGL篇《一》创建窗口
[笔记]音视频学习之OpenGL篇《一》创建窗口
|
Windows
【OpenGL】二十四、OpenGL 纹理贴图 ( 读取文件内容 | 桌面程序添加控制台窗口 | ‘fopen‘: This function may be unsafe 错误处理 )(二)
【OpenGL】二十四、OpenGL 纹理贴图 ( 读取文件内容 | 桌面程序添加控制台窗口 | ‘fopen‘: This function may be unsafe 错误处理 )(二)
122 0
【OpenGL】二十四、OpenGL 纹理贴图 ( 读取文件内容 | 桌面程序添加控制台窗口 | ‘fopen‘: This function may be unsafe 错误处理 )(二)
|
C++
【OpenGL】二十四、OpenGL 纹理贴图 ( 读取文件内容 | 桌面程序添加控制台窗口 | ‘fopen‘: This function may be unsafe 错误处理 )(一)
【OpenGL】二十四、OpenGL 纹理贴图 ( 读取文件内容 | 桌面程序添加控制台窗口 | ‘fopen‘: This function may be unsafe 错误处理 )(一)
126 0
【OpenGL】二十四、OpenGL 纹理贴图 ( 读取文件内容 | 桌面程序添加控制台窗口 | ‘fopen‘: This function may be unsafe 错误处理 )(一)
【OpenGL】八、初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗口设置为 OpenGL 窗口 | 设置像素格式描述符 | 渲染绘制 ) ★(二)
【OpenGL】八、初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗口设置为 OpenGL 窗口 | 设置像素格式描述符 | 渲染绘制 ) ★(二)
151 0
【OpenGL】八、初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗口设置为 OpenGL 窗口 | 设置像素格式描述符 | 渲染绘制 ) ★(二)
|
存储 Windows
【OpenGL】八、初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗口设置为 OpenGL 窗口 | 设置像素格式描述符 | 渲染绘制 ) ★(一)
【OpenGL】八、初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗口设置为 OpenGL 窗口 | 设置像素格式描述符 | 渲染绘制 ) ★(一)
241 0
|
Windows
【OpenGL】七、桌面窗口搭建 ( 导入头文件 | 桌面程序入口函数 | 注册窗口 | 创建窗口 | 显示窗口 )(二)
【OpenGL】七、桌面窗口搭建 ( 导入头文件 | 桌面程序入口函数 | 注册窗口 | 创建窗口 | 显示窗口 )(二)
147 0
【OpenGL】七、桌面窗口搭建 ( 导入头文件 | 桌面程序入口函数 | 注册窗口 | 创建窗口 | 显示窗口 )(二)
|
C++ Windows
【OpenGL】一、Visual Studio 2019 创建 Windows 桌面程序 ( Visual Studio Installer 安装 C++ 桌面开发库 | 创建桌面程序 )
【OpenGL】一、Visual Studio 2019 创建 Windows 桌面程序 ( Visual Studio Installer 安装 C++ 桌面开发库 | 创建桌面程序 )
534 0
【OpenGL】一、Visual Studio 2019 创建 Windows 桌面程序 ( Visual Studio Installer 安装 C++ 桌面开发库 | 创建桌面程序 )
|
存储 API Android开发
OpenGL ES 如何传输一个超大数组给着色器程序?
如何传输一个超大数组给着色器程序?
433 0
OpenGL ES 如何传输一个超大数组给着色器程序?
|
5月前
|
XML 小程序 Java
【Android App】三维投影OpenGL ES的讲解及着色器实现(附源码和演示 超详细)
【Android App】三维投影OpenGL ES的讲解及着色器实现(附源码和演示 超详细)
56 0
|
存储 编解码 算法
Opengl ES之LUT滤镜(上)
Opengl ES之连载系列
344 0