1

对于习惯了 WinAPI/C 环境的人,我对这三个框架的优缺点很感兴趣。要转OO的代码不是很复杂:大约3000行代码,主要是控件。我想使程序面向对象,以使其可以被其他人维护。目前它是一大团C泥,我想用C++ OO重新编码。

我应该使用哪些框架?

4

2 回答 2

2
  • Visual Component Library (VCL) 是由 Borland 为其产品(Delphi 和 C++ Builder)开发的库。

  • Microsoft 基础类库(MFC) 是由 Microsoft 开发的库,本质上是围绕 C WinAPI 的 C++ 包装器。但是,它不包含在 Visual C++ 2005/2008/2010 Express 中。

  • 正如 MFC 的 Wikipedia 文章所说,Windows 模板库(WTL) 是一个 C++ 模板库,它是 MFC 的轻量级替代品。没有官方文档,虽然它正在这里构建。(有关示例、控件和实用程序,请参阅此页面。) WTL 没有与 IDE 集成,并且它不受产品支持服务的官方支持。

  • Qt是一个跨平台的 C++ 框架,提供三种许可证(GNU LGPL 2.1 with Qt special exception、GNU GPL 3.0、Commercial Developer License)。作为跨平台,该框架不是 C WinAPI 库的包装器。它还具有针对不同编程语言的绑定。
    Qt 使用的 API 风格是本机风格,在最新版本中;以前,它是在模拟原生 GUI(除了 Qt 是原生 GUI,例如在 KDE 中)。
    没有一个简单、完整的示例,它不会太长、太基础,无法让您了解 Qt 和 C WinAPI 之间的区别,但是您可以在此处找到一些示例. 我会说在所有框架中都使用了一些特定的概念,例如信号的概念(简而言之,从一个小部件引发的事件)和插槽(简而言之,当事件引发时调用的方法)的概念,其中允许您根据其他小部件的值更改小部件显示的内容。

    connect(xSlider, SIGNAL(valueChanged(int)), glWidget, SLOT(setXRotation(int)));
    connect(glWidget, SIGNAL(xRotationChanged(int)), xSlider, SLOT(setValue(int)));
    connect(ySlider, SIGNAL(valueChanged(int)), glWidget, SLOT(setYRotation(int)));
    connect(glWidget, SIGNAL(yRotationChanged(int)), ySlider, SLOT(setValue(int)));
    connect(zSlider, SIGNAL(valueChanged(int)), glWidget, SLOT(setZRotation(int)));
    connect(glWidget, SIGNAL(zRotationChanged(int)), zSlider, SLOT(setValue(int)));
    

    如果您正在寻找一个允许您构建跨平台应用程序或使用不同编程语言的库,这就是我会选择的。考虑一下您获得 Qt 的许可证。

如果你想创建一个只在 Windows 上运行的 C++ 应用程序,我也会选择 WTL。尊重几年前,它现在更容易使用它,虽然不支持 IDE,这意味着(例如)没有创建 UI 类的实例或创建子类的向导一个 GUI 类。

于 2012-10-01T04:48:53.813 回答
0

MFC 和 WTL 都最接近 WinAPI,因为它们只是 WinAPI 上的 OOP 包装器。这是将 C 代码转换为 C++ 的最快捷方式。QT 更加健壮和现代,但您必须完全重新设计您的项目。我建议使用 WTL。

于 2012-10-01T03:54:55.130 回答