[英]How can i make a portable C++ program for Windows with GUI, independent from .NET or other Libs?
[英]Windows GUI: Can I access the "modern ui" from C++?
我試圖找到一個簡單問題的答案:我可以使用 C/C++ 中的現代 UI - 你在 Windows 10 中看到的很多,它也受到深色主題的影響嗎?
我知道 Win32 API windows 不受黑暗主題的影響,至少在大多數情況下是這樣。 如果 .NET Windows Forms 受到影響並且 UWP 使用這個名為 CX 的奇怪的 C++ 子集,我也沒有找到明確的線索? 我有點困惑。
基本上,我只想選擇正確的 API 來使用 Windows 10 中常用的現代 UI 元素來設計我的 GUI。原因之一是這些控件已經可以正確地訪問——這是其他 GUI 框架實際上可能缺乏的。 (我自己有視力障礙,因此使用 NVDA 進行粗略測試,因為我的大多數朋友都依賴這些工具。)
Windows 中的“現代” UI 框架(從未命名)最初僅適用於面向通用 Windows 平台 (UWP) 的應用程序。 后來它通過XAML islands提供給經典桌面應用程序。 后來仍然決定將 UI 框架與操作系統分離,以便更改可以獨立於操作系統更新發布。 這就是成為WinUI 2的原因。 在 WinUI 3 中,它計划完全分離,使 UI 立即可用於經典桌面應用程序。
整個 API 表面暴露為 Windows 運行時類型。 雖然您可以在 ABI 級別與這些類型進行交互(這是WRL所做的),但使用創造的語言投影更方便。 最初,它是 C++/CX,一種由 Microsoft 編譯器實現的非標准語言擴展,后來被 C++/WinRT 取代, C++/WinRT是一種在標准 C++ 中實現的語言投影。
所以,是的,可以在 C++ 的經典桌面應用程序中使用新的 UI 框架。盡管必須指出,在 IDE 集成方面,C++/WinRT 仍然無法與 C++/CX 相提並論,尤其是- XAML 創作和裝訂。 仍然有可能,但有時會更乏味。
使用 WinUI API: https://learn.microsoft.com/en-us/windows/apps/winui/winui3/注意:您可以將它與 c++ 一起使用,而不是與 c 一起使用。
我想你所需要的只是啟用視覺 styles。默認情況下,Win32 應用程序看起來像 Windows 98/2000 GUI。 要將 window 邊框切換為 WinXP/7/10 樣式,您需要添加內容簡單的清單文件並使用InitCommonControls()
或InitCommonControlsEx()
。 請參閱以下文章:
https://learn.microsoft.com/en-us/windows/win32/controls/cookbook-overview https://www.codeproject.com/Questions/58606/How-do-you-get-XP-visual-styles -清單到工作-o
簡而言之,您需要執行 3 個步驟:
InitCommonControls();
(或InitCommonControlsEx
)在WinMain
中;.manifest
且名稱與您的.exe
相同的文件。 請參閱 Visual Studio 項目屬性(其他清單文件)中的Manifest Tool
條目。示例清單文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="*"
name="CompanyName.ProductName.YourApplication"
type="win32"
/>
<description>Application Description</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.