带有 C++ 的 WPF,有可能吗?

Posted

技术标签:

【中文标题】带有 C++ 的 WPF,有可能吗?【英文标题】:WPF with C++, is it possible? 【发布时间】:2011-06-21 15:09:29 【问题描述】:

我的主程序是用 C++ 编写的,但现在我需要构建一个漂亮的应用程序,而且我知道 WPF 很简单,并且可以制作漂亮的应用程序。 WPF 可以与 C++ 或 C# 和 C++ 一起使用吗? (如果是,如何?)WPF 对我来说是最好的吗?

【问题讨论】:

这对当前的 Windows 没有帮助,但看起来 W8 将为精美的 GUI 提供良好的原生 C++ 支持:arstechnica.com/microsoft/news/2011/06/… 【参考方案1】:

您可以在托管 C++ 项目中使用 WPF,但最好将 C++ 保存在单独的程序集中并从 C# 或 VB WPF 项目中引用它。

【讨论】:

感谢您的回答。我有点菜鸟 :) 那我怎么能轻松做到呢?你有好的教程吗,或者你能告诉我怎么做,因为我在 C# 和 WPF 中找到了很多教程,但我没有找到 C++ 和 WPF 的东西。 没有任何关于 C++ 和 WPF 的教程,因为 WPF 是现代的,并且可以更好地使用像 C# 这样的现代语言。因此,就像我说的,使用 C# 创建 WPF 用户界面,然后引用 C++ 程序集。以下是如何使用DllImport 执行此操作的示例:dotnetperls.com/dllimport 所以我应该使用 Visual2010 在 C++ 中创建一个类库项目,以创建我的 DLL 并在我的第二个 C# 应用程序中使用这个 DLL?就是这样?或者不是这种项目可能是针对 C++ 的? C++ 中的类库项目将创建一个托管 C++ DLL。 DllImport 将使用现有的 native C++。这取决于您的代码。确保您首先了解托管 C++ 和本机 C++ 之间的区别。【参考方案2】:

是的,您可以在 Managed C+ 或 C++/CLI 中使用 WPF 框架开发 GUI。但它们不是标准 C++,因此不是跨平台的。

如果您只想要一个用 C++ 编写的应用程序的 GUI,那么您也可以尝试Qt。 Qt 的优点是它完全在 C++ 中。不是 Microsoft 托管 C++。第二个优点是它的跨平台工具包。这意味着,您可以在 Windows、Linux、Mac 以及其他机器上运行您的应用。

看看它的文档

Qt Reference Documentation

它有很多用于快速开发的工具,例如Qt Creator、Qt Designer 等。您可以通过浏览上面的链接查看所有这些。

【讨论】:

Qt可以创建快速图表吗?我正在开发一个金融应用程序,所以我的图表会有 5k 的点和线,所以流畅的东西会很甜。 :) @Nazka:相信我,Qt 创建图表的速度将比 WPF 快得多。 @Nazka:只要下载工具包,它的体积很小;下载不会花太多时间。下载并查看工具包本身附带的演示示例。它们非常漂亮和酷。 Qt Creator 和 Qt Designer 听起来不错。 :) 我的主要问题离我很远,但在 Qt 中,很容易构建一个带有字符串列表的选项栏?编辑:是的,我会尝试 Qt @Nazka:Qt 是一个非常成熟的工具包。你可以用它做任何事情。此外,它很容易。它甚至有像 WPF 这样的声明性语言。所以一切都变得非常简单,开发也可以非常快。【参考方案3】:

WPF 和 Silverlight 一起死了,记住,MS 说它从现在开始只支持 html5 :)

在您的 C++ 应用程序中使用 WPF 可以使用 hwndSource 来实现,但这不是最佳解决方案,因为您必须创建 C# 或 VB.NET GUI 应用程序,并使用它通过某些方式与您的 C++ 应用程序通信IPC 的形式。

还有其他选择,可能最好的一种是使用Qt 编写您的 GUI,这是非常受尊重的。您可以通过使用QML 与旧的基于表单的系统一起编写来获得与 WPF 相似的功能(这意味着您可以获得使用旧的、无聊的文本框等的所有开发速度,以及使用新的声明式 UI 系统,都在同一个系统中。甜蜜)。

当然,一个不错的选择是将您的应用程序变成一个后端服务器进程,并从基于 Web 服务器的 HTML5 UI 调用它。这是相当未来的证明,易于部署到客户,并且尽可能现代。

【讨论】:

在您的最后一个解决方案中,目标是建立一个网站?还是网络服务?在我的 C++ 应用程序和网站之间建立接口的最佳工具是什么? (可能只是一个很棒的带有 mysql 的数据库?) WPF+SL 死了吗?请引用您的消息来源,因为在这一点上,这只是一个丑陋的谣言。如果你只是在预测,请不要把它当作事实。 @djdanlib:这是一个谣言,建议您继续听,因为它并非完全没有证据。这是今天的部分:i-programmer.info/news/81-web-general/… 烟雾的问题在于,它下面经常真的有火。这可能不是真的,但这并不意味着你可以完全忽略它。 @Nazka:一个网站 - 一个不在网络服务器中运行其服务器端代码的网站。网站只是另一个应用程序,其中 gui 存在于浏览器中,而不是直接运行。您需要能够以某种方式从某些 Web 服务器代码调用 C++ 应用程序中的方法,但这可以是任何东西 - 套接字、RPC、甚至命令行 - 但它需要一种方法来公开客户端可以调用的方法。跨度> 我一直在密切关注它,而微软没有说过这样的话——事实上,他们的说法恰恰相反。您只需看看微软服务器和工具部门的总裁:team.silverlight.net/announcement/pdc-and-silverlight - 但如果您想进一步了解,请尝试 Scott Guthrie:weblogs.asp.net/scottgu/archive/2010/11/04/… ... 让我们都同意自己关注这个问题,所以我们不要陷入争论,让事情变得更偏离主题。

以上是关于带有 C++ 的 WPF,有可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

带有 Directx 11 的 WPF

仅底部带有圆角的 WPF 弹出窗口

C++:监控文件大小。这可能有问题吗?

WPF 应用程序可以在带有 .Net Core 3 的 Linux 或 Mac 中运行吗?

从 C++ 调用带有可选参数的 Fortran 子例程

从 C++ 调用带有可选参数的 Fortran 子例程