將MFC應用程式移植到Linux

2022-12-03 21:24:12 字數 2462 閱讀 6453

循序漸進使用 wxwindows 的指南

markus neifer ( 軟體開發人員

markus neifer 最初使用 logo 教學語言來程式設計,後來他使用過多種 basic 語言。在研究地理資訊學期間,他學了一些 c,但很快又轉向了 c++ 和 j**a,因為這兩種語言具有物件導向的本質。他曾在研發領域工作過,期間他出版過關於科技軟體的物件導向開發的文章。

目前,他是地理資訊系統領域的軟體工程師。可以通過 和 markus 聯絡。

簡介:將 windows 應用程式移植到 linux 不必涉及再培訓的痛苦經歷。markus neifer 演示了如何使用 wxwindows 移植 mfc,指導讀者使用 wxwindows 這一開放原始碼工具箱,並循序漸進地向讀者介紹了乙個完整的移植示例。

您可能仍然在維護用微軟基礎類庫(microsoft foundation classes(mfc))構建的舊的 windows 應用程式,而現在卻有客戶要求 linux 版本,該怎麼辦呢?在您的團隊中可能有技術熟練的 mfc 開發人員,但如何達到加速 linux 開發呢?別急;本文就是針對您這種情況而寫的。

依靠 wxwindows(一種用於 c++ 和 python 的可移植 gui 工具箱)的幫助,我將以多文件介面(multiple document inte***ce (mdi))文字編輯器為例向您演示如何將僅 windows 的 mfc 應用程式移植到 linux。類似這樣的小型應用程式有助於我們將討論集中在移植框架的具體細節上,從而避免我們迷失在**的汪洋中。可以在本文後面的參考資料一節中獲取完整的 mfc 應用程式和 wxwindows 應用程式的源**。

文件/檢視概述

我將演示的應用程式使用眾所周知的文件/檢視體系結構,因為它可以象大多數應用程式一樣處理文件。即使您的應用程式不使用文件/檢視體系結構,我也建議您讀下去。只要您已在轉向這種框架,您就可能想要新增這項功能。

在我的關於 wxwindows 的前一篇文章中,曾經指出過 mfc 和 wxwindows 之間具有某些相似性。字串類 cstring 、 wxstring 和事件系統之間都非常相似。但還不止這些相似性。

wxwindows 工具箱還提供對文件/檢視體系結構的類 mfc 支援。

我將從核心類的比較開始。下表列出了兩種框架的文件/檢視體系結構所涉及的類。

表 1. 文件/檢視模擬較

除編輯檢視類以外,每個 mfc 類都有其對應的 wxwindows 類。(最後一項中 mfc 的部分為空,因為 mfc 沒有獨立的文件管理器類。由應用程式類 cwinapp 內部處理文件。

)下列 uml 圖演示了這些類之間的關係:

圖 1. mfc 類

圖 2. wxwindows 類

應用程式

每個框架都提供乙個表示應用程式本身的類。mfc 應用程式類宣告了乙個構造器、乙個用於初始化的方法、乙個用於事件處理的方法和乙個訊息對映表。您需要這個訊息對映表宣告和事件處理方法,因為應用程式的「about」對話方塊將由該類處理。

應用程式類:mfc

注:最初建立 mfc 應用程式時,我使用 microsoft visual studio 所包含的應用程式嚮導來建立,但在我的**片段中,我將不給出由嚮導生成的、有時會使人迷惑的注釋( //{{afx_msg 及類似的東西)。完整的源**,請參閱 zip 壓縮文件。

對應的 wxwindows 類看起來略微有些不同。它也宣告了乙個構造器及乙個用於初始化的方法,但卻不需要任何東西來處理訊息。如同您隨後將看到的一樣,在主框架類中處理「about」對話方塊。

應用程式類:wxwindows

正如下面所描述的那樣,這個類需要乙個 wxdocmanager 屬性來處理在初始化方法 oninit() 中建立的模板。應用程式退出時,清理方法 onexit() 將刪除這個 wxdocmanager 物件。

所有應用程式都需要其入口點(也稱為 main() 或 winmain() )。在實現這一點的方法上,兩種框架略微有些不同。在 mfc 中,象這樣建立應用程式類的靜態物件:

在 wxwindows 中,則象這樣使用 implement_app() 巨集:

如果對該巨集所做的事情感興趣,請檢視標頭檔案 wx/ 中它的定義,在可**的源**中找到該標頭檔案。基本上,它是為所使用的平台插入適當的入口點函式。建立了應用程式類的物件之後,需要對其進行初始化。

對於 mfc,microsoft 建議不使用應用程式物件的構造器來初始化物件。而是應該使用其 initinstance() 方法。要執行任何清理,請實現 exitinstance() 方法。

雖然應用程式初始化有很多事情要做,這裡我將只著重討論與文件/檢視有關的**。要建立文件/檢視框架, initinstance() 方法必須建立乙個 cmultidoctemplate ,如下所示:

建立文件/檢視**:mfc

wxwindows 應用程式提供 oninit() 方法來做任何初始化工作,並提供 onexit() 用於清理。要在 wxwindows 應用程式中建立文件/檢視框架, oninit() 方法必須象這樣建立 wxdoctemplate :

建立文件/檢視**:wxwindows

函式應用程式

什麼是函式?excel函式即是預先定義,執行計算 分析等處理資料任務的特殊公式。以常用的求和函式sum為例,它的語法是 sum number1,number2,其中 sum 稱為函式名稱,乙個函式只有唯一的乙個名稱,它決定了函式的功能和用途。函式名稱後緊跟左括號,接著是用逗號分隔的稱為引數的內容,最...

5800應用程式

一 座標計算源程式 1.主程式 tyqxjs xy sz n u x0 v y0 o s0 g f0 h ls p r0 r rn q c 1 p d p r 2hpr e 180 n 1 goto 1 go to 2 lbl 1 sz w abs s o prog sub1 x xs x y ys...

應用程式設計報告

大作業題目 班級 學號 學生姓名 其他組員 作業成績 應用程式設計基礎 1 設計報告 1 目錄 2 大作業設計報告內容 2 一 需求分析 2 二 功能概要 3 三 模組組織 3 四 功能實現 4 1 計數模組 4 2 顏色模組 5 3 定時模組 6 4 新建儲存列印模組 7 5.幫助 10 五 製作...