2024年4月2日发(作者:)

将 MFC 应用程序移植到 Linux

循序渐进使用 wxWindows 的指南

Markus Neifer (howlingmad@), 软件开发人员

简介: 将 Windows 应用程序移植到 Linux 不必涉及再培训的痛苦经历。

Markus Neifer 演示了如何使用 wxWindows 移植 MFC,指导读者使用

wxWindows 这一开放源码工具箱,并循序渐进地向读者介绍了一个完整的移植

示例。

您可能仍然在维护用微软基础类库(Microsoft Foundation Classes(MFC))

构建的旧的 Windows 应用程序,而现在却有客户要求 Linux 版本,该怎么办

呢?在您的团队中可能有技术熟练的 MFC 开发人员,但如何达到加速 Linux

开发呢?别急;本文就是针对您这种情况而写的。依靠 wxWindows(一种用于

C++ 和 Python 的可移植 GUI 工具箱)的帮助,我将以多文档界面(Multiple

Document Interface (MDI))文本编辑器为例向您演示如何将仅 Windows 的

MFC 应用程序移植到 Linux。类似这样的小型应用程序有助于我们将讨论集中

在移植框架的具体细节上,从而避免我们迷失在代码的汪洋中。可以在本文后面

的 参考资料一节中获取完整的 MFC 应用程序和 wxWindows 应用程序的源

代码。

文档/视图概述

我将演示的应用程序使用众所周知的文档/视图体系结构,因为它可以象大多数

应用程序一样处理文档。即使您的应用程序不使用文档/视图体系结构,我也建

议您读下去。只要您已在转向这种框架,您就可能想要添加这项功能。

在我的关于 wxWindows 的 前一篇文章中,曾经指出过 MFC 和 wxWindows

之间具有某些相似性。字符串类

CString

wxString

和事件系统之间都非常相似。

但还不止这些相似性。wxWindows 工具箱还提供对文档/视图体系结构的类

MFC 支持。

我将从核心类的比较开始。下表列出了两种框架的文档/视图体系结构所涉及的

类。

表 1. 文档/视图类比较

文档(Document)

视图(View)

编辑视图(Edit view)

模板类(Template class)

MDI 父框架(MDI parent frame)

MDI 子框架(MDI child frame)

文档管理器(Document manager)

MFC 类

CDocument

CView

CEditView

CMultiDocTemplate

CMDIFrameWnd

CMDIChildWnd

n/a

wxWindows 类

wxDocument

wxView

n/a

wxDocTemplate

wxDocMDIParentFrame

wxDocMDIChildFrame

wxDocManager

除编辑视图类以外,每个 MFC 类都有其对应的 wxWindows 类。(最后一项

中 MFC 的部分为空,因为 MFC 没有独立的文档管理器类。由应用程序类

CWinApp

内部处理文档。)下列 UML 图演示了这些类之间的关系:

图 1. MFC 类