編輯之后的 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 樣式 , 這個樣式的內容沒啥固定的 , 可以根據自己的需求來 , 也可以亂來 , 不離譜就好
經驗總結擴展閱讀
- 為什么阿里Java開發手冊不推薦使用Timestamp
- VMware安裝Win11+WSA子系統和使用教程
- 拱辰享適合什么膚質的人使用?
- 護衣留香珠的使用方法?
- 悅薇水乳適合多大年紀的人使用?
- 怡麗絲爾護膚品適合多大年齡的人使用?
- 御泥坊眼膜貼適合什么年齡段的人使用?
- 御泥坊五件套使用步驟是什么?
- 御泥坊小金瓶適合什么人群使用?
- 御泥坊小金瓶適合什么年齡使用?
