繁体   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