小编yah*_*osh的帖子

将 WinUI 与 C++ 结合使用的指南

我将尝试尽可能简洁地总结我的问题:

  • 我有一个遗留的 C++ 项目,它使用 WinAPI 创建和管理 UI 元素。我想用一个支持 OOP 并具有某种视觉设计器的更现代的框架来替换它。我打算通过用新框架逐步替换旧的基于 WinAPI 的代码来实现这一点(例如,我可以引入一个使用新框架的新弹出窗口,而 UI 的其余部分仍将使用旧的窗口过程等)
  • 我最初的计划是使用 Qt,因为它允许我方便地将 UI 代码包装在对象中,这样我就可以轻松实例化和管理对象。它还有一个设计器,可以让我创建自定义 UI 元素(包括自动布局管理)、一个 Visual Studio 扩展,总的来说,过去的经验表明 Qt 非常适合我的目的。然而,这里的用户警告我,它与 WinAPI 配合得不好,我基本上必须从头开始重建应用程序。
  • 有人建议我改用 WinUI,即 XAML 与 C++/WinRT 相结合,因为它们应该提供与我上面描述的相同的灵活性。我成功地复制了“Win32 应用程序中的主机 UWP 控件”指南的结果,但除此之外似乎没有什么有用的材料。
  • 要获得明确的答案,浏览 Microsoft 文档相当困难。目前,上面的指南让我相信我仍然会坚持使用 WinAPI,因为似乎没有一种明显的方法将 UI 代码包装在对象中,最好是那些我可以从现有基础派生的对象类(例如某种基本的 Window 对象)

我有以下环境可以使用:

  • MSVC 支持的最新 C++ 功能级别
  • 视觉工作室 2019
  • Windows 10(即我不介意是否不再与 Windows 操作系统兼容)

我需要的:

  • 关于是否可以以与使用 C++ 在 Qt 中设计 UI 代码类似的方式使用 XAML 和 C++/WinRT 的明确答案。精确的奇偶校验是不必要的,我只是想消除使用 WinAPI 管理 UI 的麻烦,实际上我必须“手动”完成所有操作

  • 如果上述情况属实,那么我在哪里可以找到工作流程各个步骤的指南?如何制作“窗口对象”,如何设计具有布局管理的窗口,如何处理 UI 事件等?

  • 如果需要在我尝试升级的旧版 WinAPI 应用程序的上下文中完成上述操作,是否同样可行?

c++ user-interface winapi c++-winrt winui

6
推荐指数
0
解决办法
4245
查看次数

如何使用折叠表达式实例化可变参数模板函数中的每个类型?

我正在尝试创建一个“对象管理器”,它将创建和存储模板类的实例。该类采用一个模板参数并从基类继承,以允许将具有不同模板参数的实例存储在同一容器中。将用作模板参数的类型将由用户在可变参数模板函数中提供。

以下是说明问题的最小示例:

struct A
{
    int m_a = 0;
};

template<typename T>
struct B : public A
{
    int m_b = 1;
    T m_t;
};

template<typename... Types> std::vector<A*> generate_a_vec()
{
    std::vector<A*> a_vec; // <--- Need to initialize with a new B<T> for each T in "Types"
    return a_vec;
}

int main()
{
    std::vector<A*> a_vec = generate_a_vec<int, float, bool>();

    for(A* a : a_vec)
    {
       std::cout << a->m_a << std::endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

让我们假设T我们将使用的每个都有一个默认构造函数。有没有办法使用折叠表达式为每个类型创建一个B<T>with并将结果指针添加到向量中?newTypesgenerate_a_vec()

c++ variadic-templates fold-expression c++17

2
推荐指数
1
解决办法
301
查看次数