DirectX 12学习1--创建一个框架和窗口

*【声明】本文是入门级学习教程,参考自http://www.rastertek.com/dx11s2tut04.html

环境设置
  1. 新建一个空项目–win32控制台应用程序。
    VS2019创建一个win32控制台程序。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    然后在顶部栏上的“解决方案平台”下拉列表中将看到值“ x86”,选择该值并选择“ x64”。这会将您的项目设置为64位,而不是默认的32位。

现在,从菜单中单击“查看”,然后选择“属性管理器”。接下来,在屏幕左侧的属性管理器窗口中,单击项目名称(我的名称为Engine)左侧的箭头。这将显示您拥有的解决方案配置。选择“调试| x64”文件夹,然后双击“ Microsoft.Cpp.x64.user”。

在弹出的窗口中,从左侧菜单中选择“ VC ++目录”。然后将显示项目使用的目录。

现在,从目录列表中选择“包含目录”,然后单击右侧显示的向下箭头。从弹出的选择中选择“编辑”。

单击顶部的文件夹图标(如果将鼠标悬停在其上,则称为“换行”),然后单击右侧显示的“ …”。

导航到Windows 10 SDK的include文件夹,不同的版本命名不同,但是在我的系统上是:C:\ Program Files(x86)\ Windows Kits \ 10 \ Include \ 10.0.10240.0 \ um

接下来单击“选择文件夹”,然后单击“确定”。

现在,我们还需要做同样的事情来为共享头添加包含。遵循相同的过程并添加:C:\ Program Files(x86)\ Windows Kits \ 10 \ Include \ 10.0.10240.0 \ shared

还需要库目录,因此现在从目录列表中选择“库目录”,然后单击右侧显示的向下箭头。从弹出的选择中选择“编辑”。

单击顶部的文件夹图标(如果将鼠标悬停在其上,则称为“换行”),然后单击右侧显示的“ …”。

导航到Windows 10 SDK库文件夹,不同版本的名称不同,但是在我的系统上,64位库位于此处:C:\ Program Files(x86)\ Windows Kits \ 10 \ Lib \ 10.0.10240.0 \ um \ x64

接下来单击“选择文件夹”,然后单击“确定”。

最后,单击“属性页”窗口右下方的“应用”按钮。

现在单击“确定”关闭窗口,您的设置将完成。从菜单中单击“查看”,然后单击“解决方案资源管理器”以返回您的代码。现在,所有DirectX项目都应该可以正常编译,并且“无法打开包含文件:‘d3d12.h’:没有这样的文件或目录”的错误应该消失。另请注意,这些设置将自动应用于“发行版” |“发行版”。x64解决方案配置,因此您无需在此处进行设置。同样,它对于所有新项目都应永久保留,并且不再需要重新设置。

搭建框架和窗口

框架将从四个项目开始。它将具有WinMain函数来处理应用程序的入口点。它还将具有一个系统类,该类封装将在WinMain函数中调用的整个应用程序。在系统类内部,我们将具有一个用于处理用户输入的输入类和一个用于处理DirectX图形代码的图形类。这是框架设置的图:
在这里插入图片描述
在这里插入图片描述
//mian.cpp


// Filename: main.cpp

#include "systemclass.h"


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pScmdline, int iCmdshow)
{
   
	SystemClass* System;
	bool result;


	// 创建系统对象。
	System = new SystemClass;
	if (!System)
	{
   
		return 0;
	}

	//初始化并运行系统对象。
	result = System->Initialize();
	if (result)
	{
   
		System->Run();
	}

	// 关闭并释放系统对象。
	System->Shutdown();
	delete System;
	System = 0;

	return 0;
}

//systemclass.h

#pragma once
#ifndef _SYSTEMCLASS_H_
#define _SYSTEMCLASS_H_
//这里我们定义了WIN32_LEAN_AND_MEAN。我们这样做是为了加快构建过程,
//它通过排除一些较少使用的api来减少Win32头文件的大小。

///
// PRE-PROCESSING DIRECTIVES 预处理指令//
///
#define WIN32_LEAN_AND_MEAN
//windows.h包含在内,以便我们可以调用要创建的函数
//销毁窗口,并能够使用其他有用的win32功能.

//
// INCLUDES 包含文件//
//
#include <windows.h>
//我们已经在框架中包含了其他两个类的头文件
//这样我们就可以在system类中使用它们了。

///
// MY CLASS INCLUDES 自己新建类的包含头文件//
///
#include "inputclass.h"
#include "graphicsclass.h"
//类的定义相当简单。
//我们看到了在这里定义的WinMain中调用的Initialize、Shutdown和Run函数。
//还有一些私有函数将在这些函数中调用。
//我们还在类中放入了一个MessageHandler函数
//处理在应用程序运行时发送给它的windows系统消息。
//最后我们有一些私有变量m_Inputand m_Graphics
//它是指向处理图形和输入的两个对象的指针。


// Class name: SystemClass

class SystemClass
{
   
public:
	SystemClass();
	SystemClass(const SystemClass&);
	~SystemClass();

	bool Initialize();
	void Shutdown();
	void Run();

	LRESULT CALLBACK MessageHandler(HWND, UINT, WPARAM, LPARAM);

private:
	bool Frame();
	void InitializeWindows(int&, int&);
	void ShutdownWindows();

private:
	LPCWSTR m_applicationName;
	HINSTANCE m_hinstance;
	HWND m_hwnd;

	InputClass* m_Input;
	GraphicsClass* m_Graphics;
};


/
// FUNCTION PROTOTYPES  函数原型//
/
static LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);


/
// GLOBALS 全局变量//
/
static SystemClass* ApplicationHandle = 0;


#endif
//WndProc函数和应用程序句柄指针也包含在这个类文件中
//这样我们就可以将windows系统消息重定向到MessageHandler函数中
//在系统类内部。



systemclass.cpp


// Filename: systemclass.cpp

#include "systemclass.h"
/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值