DirectX 使用 Vortice 从零开始控制台创建 Direct2D1 窗口修改颜色( 二 )

编辑之后的 csproj 项目文件的代码如下
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>Exe</OutputType><TargetFramework>net6.0</TargetFramework><ImplicitUsings>enable</ImplicitUsings><Nullable>enable</Nullable></PropertyGroup><ItemGroup><PackageReference Include="Vortice.Direct2D1" Version="2.1.32" /><PackageReference Include="Vortice.Direct3D11" Version="2.1.32" /><PackageReference Include="Vortice.DirectX" Version="2.1.32" /><PackageReference Include="Vortice.D3DCompiler" Version="2.1.32" /><PackageReference Include="Vortice.Win32" Version="1.6.2" /><PackageReference Include="Microsoft.Windows.CsWin32" PrivateAssets="all" Version="0.2.63-beta" /></ItemGroup></Project>加上命名空间为了更加方便大家静态阅读代码 , 我特意使用了以下引用方式 , 让大家在阅读代码的时候 , 了解到对应的类型是属于哪个命名空间下
using D3D = Vortice.Direct3D;using D3D11 = Vortice.Direct3D11;using DXGI = Vortice.DXGI;using D2D = Vortice.Direct2D1;其他的引用代码如下
using System.Runtime.CompilerServices;using System.Runtime.InteropServices;using System.Runtime.Versioning;using Windows.Win32.Foundation;using Windows.Win32.UI.WindowsAndMessaging;using static Windows.Win32.PInvoke;using static Windows.Win32.UI.WindowsAndMessaging.PEEK_MESSAGE_REMOVE_TYPE;using static Windows.Win32.UI.WindowsAndMessaging.WNDCLASS_STYLES;using static Windows.Win32.UI.WindowsAndMessaging.WINDOW_STYLE;using static Windows.Win32.UI.WindowsAndMessaging.WINDOW_EX_STYLE;using static Windows.Win32.UI.WindowsAndMessaging.SYSTEM_METRICS_INDEX;using static Windows.Win32.UI.WindowsAndMessaging.SHOW_WINDOW_CMD;using Vortice.DCommon;using Vortice.Mathematics;using AlphaMode = Vortice.DXGI.AlphaMode;由于本文使用的项目 , 在 csproj 项目文件设置了使用 ImplicitUsings 属性 , 加上对 System 等命名空间的默认引用 , 这里就不需要再写对默认命名空间的引用
加上 Win32 定义为了创建 Win32 窗口以及初始化创建 DX 对象 , 就需要使用一些 Win32 函数 。使用 Win32 函数之前 , 需要对 Win32 函数进行定义 。本文使用 Microsoft.Windows.CsWin32 库来辅助编写 Win32 函数的定义
在安装了 Microsoft.Windows.CsWin32 库 , 即可新建一个 NativeMethods.txt 的文件 , 在这个文件里面 , 一行一个函数或 Win32 类型名 , 即可自动使用源代码生成的方式创建定义
新建一个 NativeMethods.txt 文件 , 在这个文件里面写上需要使用的 Win32 函数 , 内容如下
GetModuleHandlePeekMessageTranslateMessageDispatchMessageGetMessageRegisterClassExWDefWindowProcLoadCursorPostQuitMessageCreateWindowExWDestroyWindowShowWindowGetSystemMetricsAdjustWindowRectExGetClientRectGetWindowRectIDC_ARROWWM_KEYDOWNWM_KEYUPWM_SYSKEYDOWNWM_SYSKEYUPWM_DESTROYWM_QUITWM_PAINTWM_CLOSEWM_ACTIVATEAPPVIRTUAL_KEY完成了初始化准备之后 , 接下来就可以开始编写代码
创建窗口本文使用控制台项目 , 在创建 Win32 窗口 , 需要使用到很多 Win32 窗口创建的细节代码 , 但本文更侧重如何使用 DX 的知识 , 因此关于 Win32 创建窗口的逻辑 , 大部分都会略过
在开始创建 Win32 窗口之前 , 先准备一些参数
设置窗口的尺寸
SizeI clientSize = new SizeI(1000, 1000);再给窗口定义一个标题
// 窗口标题var title = "Demo";var windowClassName = "lindexi doubi";配置窗口的 Win32 样式 , 这个样式的内容没啥固定的 , 可以根据自己的需求来 , 也可以乱来 , 不离谱就好

经验总结扩展阅读