DirectX12学习笔记-创建窗口

news2024/11/18 7:34:11

创建窗口就是纯的Win API,我设想的窗口是这样的:
我们调用WinMain启动窗口,然后在WinMain初始化和启动消息循环。

消息会传入OnEvent,

WndProc是窗口过程函数(每个窗口都有一个WndProc函数,用于接收和处理窗口相关的消息,如鼠标点击、键盘输入、窗口大小调整等。)

#pragma once
#include<Windows.h>

namespace LocalRenderer
{

	class Window
	{
		MSG msg;
	public:

		HWND WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);

		void OnEvent(MSG& msg) const;

		static LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
	};
}

//然后就实现窗口吧

#include"Window.h"
#include <wrl/client.h>
#include <DirectXMath.h>
using namespace Microsoft::WRL;

namespace LocalRenderer
{
	HWND Window::WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
	{
#pragma region Win32 API 创建窗口

		//注册窗口类
		WNDCLASSEX wc = { 0 };
		//结构大小
		wc.cbSize = sizeof(WNDCLASSEX);
		//窗口样式:   水平大小改变重绘|竖直大小改变重绘|窗口拥有自己的绘制设备|检测鼠标双击事件
		wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_DBLCLKS;
		//这一句是窗口过程函数的初始化,如果有需要可以在Window里定义一个静态函数
		//函数签名如下,也可也不定义,自己处理MSG(下文会提到)
		//LRESULT CALLBACK Window::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
		wc.lpfnWndProc = Window::WndProc;
		//指向应用程序实例的句柄
		wc.hInstance = hInstance;
		//指定窗口的鼠标样式
		wc.hCursor = LoadCursor(NULL, IDC_ARROW);
		//设备窗口背景刷
		wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
		//唯一的窗口类名称,确保窗口类在系统中是唯一的,不会与其他窗口类冲突。
		wc.lpszClassName = L"DXRenderer";

		//注册窗口类,在这里我们可以实现一个应用只能打开一次的效果
		if (!RegisterClassExW(&wc))
		{
			MessageBox(NULL, L"窗口类注册失败", L"错误", MB_ICONERROR);
		}
		//创建窗口句柄

		HWND hwnd = CreateWindow(L"DXRenderer", L"D3D12离线渲染器 - DXRenderer", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);

		//窗口创建失败错误检查
		if (hwnd == nullptr)
		{
			DWORD error = GetLastError();
			LPVOID errorMsg;
			FormatMessage(
				FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
				NULL,
				error,
				0,
				(LPWSTR)&errorMsg,
				0,
				NULL
			);
			MessageBox(NULL, (LPCWSTR)errorMsg, L"错误", MB_ICONERROR);
			return nullptr;
		}

		//展示窗口,nCmdShow有大量的宏标志可以使用,表示不同的打开方式
		ShowWindow(hwnd, nCmdShow);
		//一般在Show后立刻调用一次,立即更新窗口,保证良好的响应
		UpdateWindow(hwnd);

#pragma endregion
		//消息循环
		MSG msg = {};
		while (msg.message != WM_QUIT)
		{
			if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
			{
				TranslateMessage(&msg);
				DispatchMessage(&msg);
				OnEvent(msg);
			}
		}

		return hwnd;
	}




	LRESULT CALLBACK Window::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
	{

		switch (uMsg) {
		case WM_CLOSE:
			PostQuitMessage(0);
			break;
			// 处理其他窗口消息
		default:
			return DefWindowProc(hwnd, uMsg, wParam, lParam);
		}
		return 0;
	}
}

在这里插入图片描述
很快乐,成功创建了一个窗口

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1039880.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

yolov8训练自己的数据集(标注到训练)

yolov8可以用作目标检测&#xff0c;分割&#xff0c;姿态&#xff0c;跟踪。这里举例目标检测从标注到训练的过程。 官网连接 先把代码下载下来&#xff0c;这个不用说了。 然后准备数据集&#xff0c;创建一个文件夹dataset&#xff08;自己命名&#xff09;&#xff0c;下面…

m1芯片-centos安装mysql

在m1芯片中&#xff0c;虚拟机centos7使用mysql官方的yum源安装mysql没问题&#xff0c;但是在启动mysql的时候会报错&#xff0c;从日志上看是硬件问题&#xff0c;报错信息为 Most likely, you have hit a bug, but this error can also be caused by malfunctioning hardwar…

OpenCV项目开发实战--主成分分析(PCA)的特征脸应用(附C++/Python实现源码)

什么是主成分分析? 这是理解这篇文章的先决条件。 图 1:使用蓝线和绿线显示 2D 数据的主要组成部分(红点)。 快速回顾一下,我们了解到第一个主成分是数据中最大方差的方向。第二主成分是空间中与第一主成分垂直(正交)的最大方差方向,依此类推。第一和第二主成分红点(2…

【周赛364-数组】美丽塔 I-力扣 2865

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

SpringBoot统一返回处理和全局异常处理

统一接口返回 前后端分离项目&#xff0c;通常后端会返回给前端统一的数据格式&#xff0c;一般包括code,msg,data信息。 创建返回统一实体类 package com.example.exceptionspring.domain;import lombok.Data;Data public class Result {private Integer code;private Strin…

基于微信小程序的校园二手交易平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言学生的主要功能有&#xff1a;管理员的主要功能有&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W…

别问怎么下载,金蝶云星空SaaS BI系统不用下载

国产自研的奥威软件-金蝶云星空SaaS BI&#xff0c;不下载不安装&#xff0c;从浏览器上一键注册登录即可使用&#xff1a;一键点击下载金蝶云星空方案&#xff0c;执行后&#xff0c;BI系统将基于金蝶云星空内的数据与方案自带的BI报表&#xff0c;智能计算分析指标&#xff0…

python模拟斐波那契数列输出

用户输入指定的数列范围&#xff0c;正确输出结果。 源代码&#xff1a; def fiebo(n): a 1 b 1 for i in range(n): if i 0: print(a, end" ") elif i 1: print(b, end" ") else: …

yolov8模型训练遇到的问题

训练时有一种报错&#xff1a;no labels found in xxx.cache 首先要确定我们的图像&#xff0c;标签文件夹内容无误。检查完后如果还不行&#xff0c;就看看训练用到的东西&#xff0c;比如dataset.py&#xff0c;部分代码如下&#xff1a; def get_labels(self):""…

中国社科院大学-美国杜兰大学金融管理硕士暨能源管理硕士项目2023年毕业典礼

中国社科院大学-美国杜兰大学金融管理硕士暨能源管理硕士项目2023年毕业典礼 2023年9月16日&#xff0c;中国社会科学院大学-美国杜兰大学金融管理硕士项目暨能源管理硕士项目2023年毕业典礼在我校望京校区成功举办。 张波副校长致辞 中国社会科学院大学副校长张波教授、杜兰大…

求职应聘找工作的同学,在线测评怎么过?

信息时代&#xff0c;越来越多的公司在招聘时引入了人才测评机制。企业和单位希望通过人才测评在广大的应聘者中&#xff0c;找到符合自己要求的人才。虽然很多应聘者能力和简历都比较出众&#xff0c;但却在最开始的人才测评中吃了亏。有的公司很看重人才测评结果。测评就相当…

多模态大模型微调记录

VisualGLMhttps://github.com/THUDM/VisualGLM-6Bhttps://github.com/THUDM/VisualGLM-6B 清华大学开源的多模态大模型&#xff0c;具有62亿参数的中英双语言模型 基本思路&#xff1a; 1 通过中间模块&#xff08;Qformer&#xff09;构建起预训练视觉和语言的桥梁 2 中英…

C++文件交互实践:职工管理系统

管理系统需求 实现一个基于多态的职工管理系统 创建管理类 管理类负责内容&#xff1a; 与用户的沟通菜单界面对职工增删改查的操作与文件的读写交互 文件交互 -- 写文件 void workerManger::save() {ofstream ofs;ofs.open(FILENAME, ios::out);for (int i 0; i < th…

TP-LINK设备在防视频监控EasyCVR平台上无法使用语音对讲功能该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

前后台分离开发 YAPI平台 前端工程化之Vue-cli

目录 YAPI介绍前端工程化之Vue-cli前端工程化简介前端工程化入门——Vue-cli环境准备Vue项目简介创建Vue项目vue项目目录结构介绍vue项目运行方法 Vue项目开发流程 前后台混合开发这种开发模式有如下缺点&#xff1a; 沟通成本高&#xff1a;后台人员发现前端有问题&#xff0…

xss靶场练习level 1-10

level 1 1.搭建靶场后打开第一题 2.点击图片&#xff0c;页面跳转后提示“payload长度为&#xff1a;4”&#xff0c;观察url 存在传参 &#xff1f;nametest &#xff0c;且字符长度为4 3.查看网页源码&#xff0c;发现第一个点击图片跳转页面存在用户名提交&#xf…

wps及word通配匹配与正则匹配之异同

前言 今天在chatgpt上找找有什么比赛可以参加。下面是它给我的部分答案&#xff0c;我想将其制成文档裱起来&#xff0c;并突出比赛名方便日后查找。 这时理所当然地想到了查找替换功能&#xff0c;但是当我启用时却发现正则匹配居然没有了&#xff0c;现在只有通配匹配了。 …

c语言常见字符函数、内存函数(详讲)

前言&#xff1a; 其实在c语言当中是没有字符串这一概念的&#xff0c;不像c里面有string类型用来存放字符串。在c语言中我们只能把字符串放在字符串常量以及字符数组中。 1.常见字符串函数 1.1strlen size_t strlen ( const char * str );作用&#xff1a;用来求字符串中 …

MySQL之表的增删查改(1)

目录 一、插入数据 1、单行数据 全列插入 2、多行数据 指定列插入 3、插入否则更新 4、替换 二、读取 1、select列 2、where条件 3、结果排序 4、筛选分页结果 一、插入数据 首先创建一张表 mysql> CREATE TABLE students(-> id int unsigned primary key auto_incre…

背靠背 HVDC-MMC模块化多电平转换器输电系统-用于无源网络系统的电能质量调节MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; MATLAB2021版本 模型简介&#xff1a; MMC-HVDC模拟背靠背HVDC模块化多电平换流器&#xff08;MMC&#xff09;作为为整个电网供电的电能质量调节系统。因此&#xff0c;模块化多电平逆变器作为远程端转换器…