簡體   English   中英

Windows GUI:我可以從 C++ 訪問“現代用戶界面”嗎?

[英]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 個步驟:

  1. 將 comctl32.lib 添加到您的項目中;
  2. 調用InitCommonControls(); (或InitCommonControlsEx )在WinMain中;
  3. 嵌入清單文件或包含一個擴展名為.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM