c++ - 将带有 MFC 的 C++ 移植到触摸屏

标签 c++ visual-c++ user-interface mfc touch

寻找与 C++ 一起使用的 GUI 框架,以“现代化”现有的触摸屏界面。

我是一名具有 C++/Java 背景的新手程序员,刚刚分配了一个项目,该项目涉及使用 MFC 获取现有 C++ 程序(3 个数据 View 、多个文本/ radio 控制对话框等)并重新设计界面“触摸屏友好”,例如更大的按钮控件、 slider 和诸如此类的东西。

我得到了相当自由的指示,可以制作“外观更现代的界面”,而不是我得到的典型的基本 MFC。我知道无论哪种方式我都有很多东西要学习,所以任何建议都是有帮助的。

到目前为止,我想到的选项是:

  1. MFC 只是调整现有控件以适应触摸输入,保持糟糕的界面。
  2. 托管 C++ 或 C++/CLI弄清楚如何在能够使用 WPF 或 Windows 窗体设计新界面的同时保留底层 C++ 结构。
  3. Qt 对我来说是全新的,但似乎是一个很有前途的选择。

真的,我只需要找到一种方法让这个程序看起来不像是 10 多年前写的,到目前为止,在自学 MFC 时,它在合并任何类型的图形方面似乎都没有那么灵活-设计/主题。


我应该研究其他替代方案吗? MFC 是否比表面看起来更丰富,我只需要了解更多有关它的知识?正如我所说,任何关于要调查的事情的建议都是有帮助的。

最佳答案

您列为 #1 的实际上可能是两种方法中的任何一种。一个(称为 1a)是继续使用与原始版本相同的 VC++ 和 MFC,并且只进行最少的编辑以在需要时增加控件的大小。除非在编写现有代码时遇到一些相当糟糕的运气,否则这可能根本不涉及任何真正的编程,并且会相对快速和容易。

第二个(称为 1b)是使用 当前 版本的 VC++、MFC 等进行更新。这可能涉及一些代码更新,但是可能没有什么可怕的(尽管如果它已经 超过 10 年了,那么也可能需要进行重大的代码更新)。小心一些,您可能能够对 UI 进行相当多的更新(例如,从菜单更改为功能区,包括颜色主题支持),而且相当的投资仍然很少。

您的 #2 很容易以几乎完全重写的形式结束。尽管表面上有相似之处,但 C++/CLI 是一种完全与 C++ 不同的语言。这真正有意义的唯一方法是,如果你有相当多的非 UI 代码,你可以完全不理会,并专门使用 C++/CLI 作为现有 C++ 和 .NET UI 之间的“桥梁”(并且 UI 相当最小,因此对 C++/CLI 的相当平庸的工具支持不会造成大问题)。如果您的 UI 非常简单,C# 有足够好的工具支持,它可能很容易成为比 C++/CLI 更好的选择。

您的 #3 可能只需要比 2 稍微少一点的重写,至少是与 UI 相关的代码。虽然代码将保留为 C++,但 Qt 与 MFC 有很大不同。如果您(可能很快)想要支持 Windows 以外的东西(例如 iOS 或 Android),那将是一个很大的优势。对于可移植性,Qt 比您提到的任何替代方案都具有巨大的优势。

很多问题又回到了您可以完整保留多少 C++ 代码的问题上。如果你在一个与 UI 完全分离的“引擎”中有很多代码,并且 UI 相当简单,那么保留现有代码很有意义,并且从头开始重写 UI 并不是那么糟糕的一个问题。另一方面,如果 UI 和业务逻辑代码严重交织在一起(相当普遍),那么对 UI 的任何微小调整都可能对我而言对其余代码进行重大重写。

结论:如果 UI 与其他代码严重交织在一起,您唯一真正的选择是在 1a 和 1b 之间。如果 UI 很容易与其他代码分离,那么在 2 和 3 之间的选择(至少对我而言)主要是可移植性是否可能很重要(现在或任何时候)。

关于c++ - 将带有 MFC 的 C++ 移植到触摸屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16527804/

相关文章:

c++ - Visual Studio 2013 上的 Allegro 4.4.2 未处理异常

c++ - 配置 netbeans 8.0 gdb 以使用 gradle cpp 插件

visual-c++ - MFC AfxParseURL反向函数?

user-interface - 使用 LLVM 实现语言时访问 native 系统 API

c++ - STL Map<string, > 与 LLVM 库冲突

c++ - 在 do...while 中放置一个开关

c++ - 将多个参数传递给线程函数

visual-studio - 如何在 Visual Studio 2013 中写入输出窗口?

java - 带有子组件的 JFrame 窗口

javascript - 需要帮助使用 Meteor.js 加载 Dat-GUI