MiniGUI

MiniGUI是一款面向嵌入式系統的高級窗口系統（Windowing System）和圖形使用者界面（Graphical User Interface，GUI）支持系統，由魏永明先生於 1998 年底開始開發。2002 年，魏永明先生創建北京飛漫軟體技術有限公司，為 MiniGUI 提供商業技術支持，同時也繼續提供開源版本，飛漫軟體是中國地區為開源社區貢獻代碼最多的軟體企業。最後一個採用 GPL 授權的 MiniGUI 版本是 1.6.10，從 MiniGUI 2.0.4 開始 MiniGUI 被重寫並增加商業授權。

經過十幾年的發展， MiniGUI 已經支持Linux/uClinux、eCos、 uC/OS-II、VxWorks、ThreadX、Nucleus、pSOS、OSE 等作業系統和數十種 SoC 晶片，已驗證的硬體平台包括 ARM-based SoCs、MIPS based SoCs、IA-based SoCs、PowerPC、M68K(DragonBall /ColdFire)、Intel x86 等，廣泛應用於通訊、醫療、工控、電力、機頂盒、多媒體終端等領域。

使用 MiniGUI 成功開發產品的企業有華為、中興通訊 等。這些使用者廣泛分部在中國大陸、台灣、新加坡、韓國、美國、德國、義大利、印度、以色列等國家和地區。

在 MiniGUI 的基礎上，飛漫軟體研發了 mDolphin (基於開源的瀏覽器核心 WebKit 的嵌入式瀏覽器)、mPeer (為使用 Java 技術的嵌入式設備提供高效的 J2SE AWT/Swing 實現支持)，並且開發了基於 Eclipse CDT 的可視化集成開發環境，為開發人員提供所見即所得(WYSIWYG)的界面設計環境。

2010年，飛漫軟體把最新版的 MiniGUI、mDolphin、mPeer、mStudio 等系統整合在一起，推出了合璧作業系統(HybridOS)解決方案。

截止2010年9月，MiniGUI 的最新版本是3.0.10， MiniGUI 將作為合璧作業系統(HybridOS)的一個組成部分而不斷演進。

## 特點優勢

MiniGUI 為嵌入式 Linux 系統提供了完整的圖形系統支持，是全球針對嵌入式 Linux僅有的兩個商用嵌入式GUI系統之一。MiniGUI為嵌入式Linux 系統提供了完整的多進程支持；可以 MiniGUI-Processes、MiniGUI-Threads或者MiniGUI-Standalone 三種運行模式運行。

MiniGUI 的主要技術特性描述如下：

- 可運行於各種含有 MMU(記憶體管理單元)的 32 位處理器架構之上，如 ix386、ARM、MIPS、PowerPC 等。
- 支持低端顯示設備(比如單色 LCD)和高端顯示設備(8 位色及以上顯示設備)。通過 MiniGUI 的圖形抽象層及圖形引擎技術，還可以支持特殊的顯示設備，比如 YUV 顯示設備。對顯示設備解析度無最大和最小限制。
- 副屏支持。當系統中有多個影片設備時，可將一個作為 MiniGUI 的主屏，實現完整的多窗口系統；而其它設備作為副屏，在其上通過 MiniGUI 的圖形接口來實現文字渲染、圖形顯示等功能。
- 可支持各種輸入設備，如 PC 鍵盤、PC 滑鼠、小鍵盤(Keypad)、觸控螢幕、遙控器等等。
- 多種鍵盤布局的支持。MiniGUI 除支持常見的美式 PC 鍵盤布局之外，還支持法語、德語等西歐語種的鍵 盤布局。
- MiniGUI 的靜態存儲隨配置選項的不同而不同，最少需占用 1MB 靜態存儲空間。
- MiniGUI 啟動後，初始占用 1MB 動態存儲空間。建議系統記憶體為 8MB 以上。
- 支持 Linux 作業系統(非 uClinux 作業系統)，可以 MiniGUI-Processes、MiniGUI-Threads 或者 MiniGUI-Standalone 三種運行模式運行。
- 內建資源支持。可以將 MiniGUI 所使用的資源，諸如位圖、圖標和字體等編譯到函數庫中，該特性可提高 MiniGUI 的初始化速度，並且非常適合無文件系統支持的實時嵌入式作業系統。
- 針對嵌入式系統的特殊支持，包括一般性的 I/O 流操作，字節序相關函數等。
- 完備的多窗口機制和消息傳遞機制。使用 MiniGUI-Threads 運行模式時，可在不同線程中創建主窗口，並支持線程間的消息傳遞；使用 MiniGUI-Processes 運行模式時，支持完整的多進程窗口系統。
- 對話框和消息框支持。
- 提供常用的控制項類，包括靜態文本框、按鈕、單行和多行編輯框、列表框、組合框、菜單按鈕、進度條、滑塊、屬性頁、工具欄、樹型控制項、月曆控制項、旋鈕控制項、酷工具欄、網格控制項、動畫控制項等。
- 其它 GUI 元素，包括菜單、加速鍵、插入符、定時器等。
- 提供有增強 GDI 函數，包括光柵操作、複雜區域處理、橢圓、圓弧、多邊形以及區域填充等函數。在提供有兼容於 C99 規範的數學庫平台上，還提供有高級二維繪圖函數，可設置線寬、線型以及填充模式等。通過 MiniGUI 的圖形抽象層及圖形引擎技術，也可以讓上述高級 GDI 接口在低端顯示螢幕上實現。
- 各種流行圖像文件的支持，包括 Windows BMP、GIF、JPEG、PNG等(JPEG 及 PNG的支持通過 libjpeg 及 libpng 函數庫提供)。
- Windows 的資源文件支持，如位圖、圖標、光標等。
- 多字符集和多字體支持，目前支持 ISO8859-1～ISO8859-15、GB2312、GBK、GB18030、BIG5、EUC-JP、Shift-JIS、EUC-KR、UNICODE(UTF-8、UTF-16 編碼)等字符集，支持等寬點陣字體、變寬點陣字體、Qt/Embedded 使用的嵌入式字體 QPF、TrueType矢量字體(對 TrueType 的支持通過 freetype 1.3 函數庫提供)。
- 輸入法支持，用於提供各種可能的輸入形式；內建有適合 PC 平台的漢字(GB2312)輸入法支持，包括內碼、全拼、智能拼音、五筆及自然碼等。

MiniGUI 的技術優勢 和其它針對嵌入式產品的圖形系統相比，MiniGUI 在對系統的需求上具有如下幾大優勢：

- 可伸縮性強。MiniGUI 豐富的功能和可配置特性，使得它既可運行於 CPU 主頻只有 60MHz 的低端產品中，亦可運行於高端嵌入式設備中，並使用 MiniGUI 的高級控制項風格及皮膚界面等技術，創建華麗的使用者界面。MiniGUI 的跨作業系統特性，使得 MiniGUI 可運行在最簡單的嵌入式作業系統之上，如 uC/OS-II，也可以運行在具有現代作業系統特性的嵌入式作業系統之上，如 Linux，而且 MiniGUI 為嵌入式 Linux 系統提供了完整的多窗口圖形環境。這些特性，使得 MiniGUI 具有非常強的可伸縮性。可伸縮性是 MiniGUI 從設計之初就考慮且不斷完善而來的。這個特性使得 MiniGUI 可應用於簡單的行業終端，也可應用於複雜的消費類電子產品。
- 輕型、占用資源少。MiniGUI 是一個定位於輕量級的嵌入式圖形庫，對系統資源的需求完全考慮到了嵌入式設備的硬體情況，如 MiniGUI 庫所占的空間最小可以裁剪到 500K 左右，對目前的嵌入式設備來說，滿足這一條件是綽綽有餘的。此外，測試結果表明，MiniGUI 能夠在 CPU 主頻為 30 MHz，僅有 4M RAM 的系統上正常運行(使用 uClinux 作業系統)，這是其它針對嵌入式產品的圖形系統所無法達到的。
- 高性能、高可靠性。MiniGUI 良好的體系結構及優化的圖形接口，可確保最快的圖形繪製速度。在設計之初，就充分考慮到了實時嵌入式系統的特點，針對多窗口環境下的圖形繪製開展了大量的研究及開發，優化了 MiniGUI 的圖形繪製性能及資源占用。MiniGUI 在大量實際系統中的應用，尤其在工業控制系統的應用，證明 MiniGUI 具有非常好的性能。從 1999 年 MiniGUI 的第一個版本發布以來，就有許多產品和項目使用 MiniGUI，MiniGUI 也不斷從這些產品或者項目當中獲得發展動力和新的技術需求，逐漸提高了自身的可靠性和健壯性。有關 MiniGUI 的最新成功案例，您可以訪問飛漫公司網站的典型案例部分：http://www.minigui.com/
- 可配置性。為滿足嵌入式系統各種各樣的需求，必須要求 GUI 系統是可配置的。和 Linux 內核類似，MiniGUI 也實現了大量的編譯配置選項，通過這些選項可指定 MiniGUI 庫中包括哪些功能而同時不包括哪些功能。大體說來，可以在如下幾個方面對 MiniGUI 進行定製配置：
- 指定 MiniGUI 要運行的硬體平台。
- 指定 MiniGUI 要運行的作業系統。
- 指定生成基於線程的 MiniGUI-Threads 運行模式還是基於進程的 MiniGUI-Processes 運行模式，或者只是最簡單的 MiniGUI-Standalone 運行模式。
- 指定需要支持的 GAL 引擎和 IAL 引擎，以及引擎相關選項。
- 指定需要支持的字體類型。
- 指定需要支持的字符集。
- 指定需要支持的圖像文件格式。
- 指定需要支持的控制項類。
- 指定控制項和窗口的整體風格，可以通過指定不同的渲染器完成。這些配置選項大大增強了 MiniGUI 的靈活性，對使用者來講，可針對具體的應用需求量體裁衣，開發最適合產品需求的應用軟體。

總之，將現代窗口和圖形技術帶入到嵌入式設備的MiniGUI，是一個非常適合於實時嵌入式設備的高效、可靠、可定製、小巧靈活的圖形使用者界面支持系統，其主要優點可以總結如下：

- 支持多種嵌入式作業系統，具備優秀的可移植性。
- 可伸縮的系統架構，易於擴展。
- 功能豐富，可靈活剪裁。
- 小體積高性能間的最佳平衡。
- 廣泛的應用領域。

MiniGUI V3.0 在以前版本的基礎上新增了如下新特性：

- 主窗口雙緩衝區(Double Buffering Main Window) 當 MiniGUI 3.0 的主窗口具有雙緩衝區時，可以在自定義緩衝區中獲得整個主窗口的渲染結果。在此基礎上，可以利用高級 2D 圖形接口或者 3D 圖形接口獲得主窗口的各種特殊顯示效果，如推拉切換、翻頁切換、捲曲效果等等。
- 外觀渲染器(Look and Feel Renderer)支持。MiniGUI V3.0 改變了以往只支持三種控制項風格的方式，引入了渲染器(Look and Feel)這一全新的模式。渲染器是定義如何繪製窗口元素的渲染器，是在MiniGUI V2.0.X的基礎上繼續完善的。窗口元素包括邊框、標題欄、標題欄按鈕、滾動條、選定項目、無效項目、高亮項目、突出項目、三維對象等；窗口元素的外觀屬性，包括窗口元素的顏色、尺寸、字體等資訊；窗口元素渲染器是對窗口元素進行定製大小、顏色、圖形、字體，便於使用者設計個性化的外觀顯示風格。使用者可以指定某個主窗口或某個控制項使用特定的渲染器，也可定製非客戶區渲染器、窗口元素的尺寸、顏色、字體、圖標，同時增強資源管理功能，從而獲得更加華麗的圖形界面。MiniGUI實現了幾種默認整體顯示風格：Classic、Flat、Fashion 和Skin。使用者可以在配置 MiniGUI 時指定相應的選項來將 MiniGUI 編譯成特定的一種顯示風格。
- Classic: 這種風格的界面是標準的Window 95風格界面，也是最廣泛使用的風格了。
- Fashion: 此種風格的界面，採用 MiniGUI 3.0 組件 mGPlus 提供的顏色漸變填充技術，因此，可獲得非常炫麗的界面效果。
- Flat: 此種風格的窗口界面，線條清晰，簡潔，因此適用於單色或者灰度顯示螢幕。因為繪製簡單，因此該渲染器占用資源最少，運行速度最快。
- Skin: 上面三種外觀渲染器基本上都是由代碼繪製出來的，具有小巧靈活的特點。但是，在嵌入式應用領域，設備的差別非常大。有些設備，已經具備了非常高的運算性能。在這種情況下，可以考慮使用皮膚外觀渲染器來美化界面。皮膚外觀渲染器需要一整套和界面相關的圖片，因此需要占用一些存儲資源。皮膚外觀渲染器的最大的特點是允許用戶定製界面，使用者可以使用自己設計的圖片替換系統原有的圖片，展現在使用者面前的就將是你自己設計的界面效果。
- 雙向文本(BIDI Text)的顯示與輸入。大家知道，除了大家熟知的從左向右書寫的文字(如英語、漢語等)之外，還有許多語言採用從右向左的書寫習慣，如阿拉伯文和希伯來文等。為了支持這些語言，MiniGUI 3.0中增加了對這兩種語言所屬字符集的處理，並增加了阿拉伯和希伯來鍵盤布局的支持，從而實現了對雙向文本的輸入輸出處理。阿拉伯文以及希伯來文的顯示。
- 不規則窗口。MiniGUI V3.0實現了不規則窗口與控制項，可滿足使用者對窗口外觀各種不同的需求。不規則窗口通過一個Region數據結構來表示可見區域，或者通過8位MYBITMAP中的透明值形成不可見區域。
- 字體。在 MiniGUI 3.0 中，飛漫軟體發明了一種新的 UNICODE 字體文件格式，稱為「UPF」字體。這種字體的最大特點，是便於在多進程環境下使用，從而極大地節約了記憶體的使用。同時，飛漫軟體增強了VBF字體格式，將VBF 字體升級到了3.0，擴大了其能適用的字符集範圍，以便支持阿拉伯文等語言文字的顯示。
- 其他增強。MiniGUI 3.0實現了桌面的可定製。通過桌面的外部編程接口，使用者可以在桌面放置圖標並響應桌面事件，實現類似Windows桌面的界面效果。除此之外，MiniGUI 3.0 還增強了透明控制項的實現，使之效率更高，且不依賴於控制項的內部實現代碼。MiniGUI 3.0 還提供獨立的滾動條控制項，提供統一的虛擬幀緩衝區程序支持等等。另外最新的MiniGUI V3.0新增加了兩個新的組件：mGUtils和mGPlus，把字體、位圖、圖標、光標等資源進行統一管理，資源的內嵌和非內嵌方式並不影響模塊的組成，由此抽象出系統資源管理模塊。

## 軟體架構

MiniGUI 由如下幾個模塊組成：

MiniGUI軟體架構圖

- 圖形抽象層(Graphics Abstraction Layer，GAL)。圖形抽象層將來自不同作業系統或設備的圖形接口進行抽象，為 MiniGUI 上層提供統一的圖形接口。在圖形抽象層內，包含有針對 Linux FB 設備、eCos LCD 設備等的軟體組成部分。這些軟體組成部分通過調用底層設備的接口來實現具體的圖形抽象層操作，如打開設備、設置解析度及顯示模式、關閉設備等。將這些用於適配圖形抽象層接口的軟體組成部分稱為「引擎(engine)」，其概念和作業系統中的設備驅動程序類似。
- 輸入抽象層(Input Abstraction Layer，IAL)。和 GAL 類似，輸入抽象層將 MiniGUI 涉及的所有輸入設備，如鍵盤(keyboard)、小鍵盤(keypad)、滑鼠(mouse)、觸控螢幕(touch screen)等抽象了出來，為上層提供一致的接口。要支持不同的鍵盤、觸控螢幕或者滑鼠接口，則通過為 IAL 編寫不同的輸入引擎實現。MiniGUI 通過 IAL 及其輸入引擎，提供對 Linux 控制台(鍵盤及滑鼠)、觸控螢幕、遙控器、小鍵盤等輸入設備的支持。
- 圖形設備接口(Graphics Device Interfaces，GDI)。該模塊基於圖形抽象層為上層應用程式提供圖形相關的接口，如繪製曲線、輸出文本、填充矩形等等。圖形設備接口中含包含其他比較獨立的子模塊，如字體字符集(font and charset)支持、圖像(image)支持等。
- 消息處理模塊(Messaging Module)。該模塊在輸入抽象層基礎上，實現了 MiniGUI 的消息處理機制，為上層提供了完備的消息管理接口。眾所周知，幾乎所有的GUI 系統本質上都是事件驅動的，系統自身的運行，以及GUI 應用程式的運行，都依賴於消息處理模塊。
- 多窗口處理模塊(Windowing Module)和控制項(Control 或 Widget)。基於圖形設備接口和消息處理模塊，MiniGUI 實現了多窗口處理模塊。該模塊為上層應用程式提供了創建主窗口和控制項的基本接口，並負責維護控制項類。控制項類是用來實現控制項代碼重用的重要概念，利用控制項類(control class)，可以創建屬於某個控制項類的多個控制項實例(instance)，從而讓這些控制項實例使用同一個控制項類的代碼，這樣，就實現了類似 C++ 那樣的類和實例概念，從而可以最大程度上重複利用已有代碼，並提高軟體的可維護性。MiniGUI 的控制項模塊實現了常見的 GUI 控制項，如靜態框、按鈕、編輯框、列表框、下拉框等等。
- 外觀支持(Look and Feel)。這個模塊是 MiniGUI V3.0 提供給上層應用程式的接口，可用來定製 MiniGUI 窗口、控制項的繪製。在 MiniGUI V3.0 之前的版本中，對主窗口和控制項的定製能力，還沒有被抽離出來形成獨立的模塊，但仍然可以通過配置選項讓 MiniGUI 的主窗口、控制項具有三種顯示風格，分別是：類似 PC 的三維風格(PC3D)、平板風格(FLAT)、流行風格(FASHION)。在 MiniGUI 3.0 中，主窗口和控制項的外觀可完全由應用程式自行定製，在創建主窗口或者控制項時，指定外觀渲染器(renderer)的名稱，就可以讓主窗口或者控制項具有各自不同的外觀。

在 MiniGUI 核心(Core)接口之上，還為應用程式提供若干組件，這些組件分別為應用程式提供某些特殊的功能特性：

- mGi 是 MiniGUI 的輸入法組件，該組件目前提供了軟鍵盤輸入法和手寫輸入法框架，並提供給使用者管理輸入法的容器，通過這個容器，使用者還可以添加自定義的輸入法。
- mGp 是針對 MiniGUI 應用程式的一個列印組件，該組件使使用者的 MiniGUI 程序具有列印輸出功能，可以將 MiniGUI 程序中的位圖或文字輸出到印表機。
- mG3d 是一個為 MiniGUI 的應用程式提供 3D 接口的組件，通過這些接口，使用者可以給自己的應用程式添加三維圖像、文字渲染、場景渲染等效果，從而可以具有三維效果的人機界面。
- mGUtils 組件為使用者提供了一些常用的對話框模板，有了這些模板，使用者就不用為一些常用的功能編寫重複代碼了。本組件提供的功能模板有：普通文件對話框、顏色設置對話框、字體設置對話框、資訊設置對話框等。
- mGPlus 組件是對 MiniGUI 圖形繪製接口的一個擴充和增強，主要提供對二維矢量圖形和高級圖形演算法的支持，如路徑、漸變填充和顏色組合等。
- mGEff 組件提供通常的頁面特效支持。

## 運行模式

和 Linux 這樣的類 UNIX 作業系統相比，一般意義上的傳統嵌入式作業系統具有一些特殊性。舉例而言，諸如 uClinux、uC/OS-II、eCos 等作業系統，通常運行在沒有 MMU(記憶體管理單元，用於提供虛擬內存支持)的 CPU 上；這時，往往就沒有進程的概念，而只有線程或者任務的概念，這樣，MiniGUI 的運行環境也就大相逕庭。因此，為了適合不同的作業系統環境，可將 MiniGUI 配置成三種不同的運行模式：

- MiniGUI-Threads。運行在 MiniGUI-Threads 上的程序可以在不同的線程中建立多個窗口，但所有的窗口在一個進程或者地址空間中運行。這種運行模式主要用來支持大多數傳統意義上的嵌入式作業系統，比如 VxWorks、ThreadX、Nucleus、OSE、pSOS、uC/OS-II、eCos等等。當然，在 Linux 和 uClinux 上，MiniGUI 也能以 MiniGUI-Threads 的模式運行。
- MiniGUI-Processes。和 MiniGUI-Threads相反，MiniGUI-Processes 上的每個程序是單獨的進程，每個進程也可以建立多個窗口，並且實現了多進程窗口系統。MiniGUI-Processes 適合於具有完整 UNIX 特性的嵌入式作業系統，比如嵌入式 Linux。該運行模式在 MiniGUI V2.0 中提供。
- MiniGUI-Standalone。這種運行模式下，MiniGUI 可以以獨立任務的方式運行，既不需要多線程也不需要多進程的支持，這種運行模式適合功能單一的應用場合。比如在一些使用 uClinux 的嵌入式產品中，因為各種原因而缺少線程支持，這時，就可以使用 MiniGUI-Standalone 來開發應用軟體。

一般而言，MiniGUI-Standalone 模式的適應面最廣，可以支持幾乎所有的作業系統(目前只用來提供對 Linux/uClinux 作業系統的支持)；MiniGUI-Threads 模式的適用面次之，可運行在支持多任務的實時嵌入式作業系統，或者具備完整 UNIX 特性的普通作業系統；MiniGUI-Processes 模式的適用面較小，它僅適合於具備完整 UNIX 特性的嵌入式作業系統，比如 Linux。但不論採用哪種運行模式，MiniGUI 為上層應用軟體提供了最大程度上的一致性；只有少數幾個涉及初始化的接口在不同運行模式上有所不同。

## 使用

使用 MiniGUI 的部分項目案例

- 大唐移動（現聯芯科技）推出採用 MiniGUI 和 Fhas 應用開發平台作為圖形顯示系統和終端應用開發平台的 TD-SCDMA 3G 手機終端軟體標準平台 Arena。
- 台灣英華達電子技術有限公司選用 MiniGUI 開發出了支持 Skype 功能的可視 IP 電話。
- 作為美國風河系統公司全球合作夥伴為 VxWorks 提供全面的圖形解決方案。
- AMD 公司在其新發布的 Argon PMP 參考設計方案中採用了 MiniGUI 和 Fhas 作為圖形環境。
- 長虹電器股份有限公司採用 MiniGUI 和嵌入式瀏覽器 mSpider 進行 DTV 和 IPTV 產品的開發。
- Intel 採用 MiniGUI 開發家庭數字多媒體網關產品。
- 聯芯科技（大唐移動）採用 MiniGUI 作為商用 TD-SCDMA 手機的 MMI 方案。
- 華為選擇 MiniGUI 作為平台產品，用於機頂盒、手持終端等產品領域。
- HappyLinux聯想 HappyLinux 1.0發行版採用 MiniGUI 開發其安裝程序。

### MiniGUI 相關組件及產品

- mStudio 的中文全稱為「飛漫可視化軟體集成開發平台」，是面向 MiniGUI 3.0 的一款集成開發環境。mStudio 基於 Eclipse 集成開發環境開發，並為使用者提供了所見即所得的界面設計工具，可自動生成和維護 MiniGUI 3.0 的應用程式框架，進行代碼的編輯、編譯、運行、調試，從而加快 MiniGUI 3.0 應用程式的開發，降低使用 MiniGUI 的門檻。
- mDolphin 是飛漫軟體基於開源的瀏覽器核心 WebKit 開發的嵌入式瀏覽器產品，並使用 MiniGUI 作為其底層圖形系統。mDolphin 的最新版本為 3.0。
- mGi 是飛漫軟體為 MiniGUI 1.6/2.0/3.0 使用者提供的一個輸入法組件，該組件目前提供了軟鍵盤輸入法和手寫輸入法框架，並提供給使用者管理輸入法的容器，通過這個容器，使用者還可以添加自定義的輸入法。此外，對於軟鍵盤輸入法，使用者可以自定義顯示的鍵盤位圖，並可添加不同的輸入翻譯方式（自帶中文全拼輸入法）。
- mGp 是飛漫軟體針對 MiniGUI 1.6/2.0/3.0 應用程式的一個列印組件，該組件使使用者的 MiniGUI 程序具有列印輸出功能，可以將 MiniGUI 程序中的位圖或文字輸出到印表機去。mGp 現已提供對愛普生和惠普等多種印表機的支持。
- mG3d 是一個為 MiniGUI 1.6/2.0/3.0 應用程式提供簡單三維（3D）接口的組件，通過這些接口，使用者可以給自己的應用程式添加三維圖像、場景渲染等效果。
- mGUtils 組件是在原 MiniGUI 2.0/1.6 的 MiniGUI 擴展庫基礎上發展而來。這個組件為應用程式提供了一些常見的窗口及對話框框實現，以簡化應用程式代碼。
- mGPlus 組件是對 MiniGUI 3.0 圖形繪製接口的一個擴充和增強，主要提供對二維矢量圖形和高級圖形演算法的支持，如路徑、漸變填充和顏色組合等。mGPlus 用來實現 MiniGUI 的 Fashion 外觀渲染器，也用於 mDolphin 瀏覽器實現高級的圖形功能，如 HTML 5 中的 Canvas 標記、SVG 支持等。
- mGEff 組件提供常規的特效支持。

## 版本歷史

- MiniGUI 3.0 是最新 MiniGUI 版本，該版本提供了眾多高級功能特性，將幫助您開發具有更好使用者體驗的嵌入式產品。
- MiniGUI 2.0 為嵌入式 Linux 系統提供了完整的圖形系統支持，是全球針對嵌入式 Linux僅有的兩個商用嵌入式 GUI 系統之一。
- MiniGUI 1.6 是為各種流行的嵌入式實時作業系統（如 VxWorks、eCos、Nucleus、ThreadX、OSE 等）提供嵌入式圖形系統支持的 MiniGUI 版本。

## 發展

MiniGUI 4.0 正在設計開發當中。

## MiniGUI hello world

MiniGUI hello world以C撰寫，這支程式含有視窗，標題為"Hello, World".

```c
#include <stdio.h>
#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>

int MiniGUIMain (int argc, const char* argv[])
{
    MSG Msg;
    HWND hMainWnd;
    MAINWINCREATE CreateInfo;

#ifdef _MGRM_PROCESSES
    JoinLayer(NAME_DEF_LAYER , "helloworld" , 0 , 0);
#endif
    CreateInfo.dwStyle = 
        WS_VISIBLE | WS_BORDER | WS_CAPTION;
    CreateInfo.dwExStyle = WS_EX_AUTOSECONDARYDC;
    CreateInfo.spCaption = "Hello, World";
    CreateInfo.hMenu = 0;
    CreateInfo.hCursor = GetSystemCursor(0);
    CreateInfo.hIcon = 0;
    CreateInfo.MainWindowProc = DefaultMainWinProc;
    CreateInfo.lx = 0;
    CreateInfo.ty = 0;
    CreateInfo.rx = g_rcScr.right;
    CreateInfo.by = g_rcScr.bottom;
    CreateInfo.iBkColor = COLOR_lightwhite;
    CreateInfo.dwAddData = 0;
    CreateInfo.hHosting = HWND_DESKTOP;
    
    hMainWnd = CreateMainWindow(&CreateInfo);
    
    if (hMainWnd == HWND_INVALID)
        return -1;

    while (GetMessage(&Msg, hMainWnd)) {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }

    MainWindowThreadCleanup (hMainWnd);
    return 0;
}
```

## 外部資料

- MiniGUI開源版本主頁
- MiniGUI商業版本主頁*

## 基本資料

- 開發者：Beijing Feynman Software Technology Co., Ltd.
- 軟體版本週期：3.2.0
- 預覽版本：3.0.6
- 作業系統：跨平台
- 類型：Widget toolkit
- 許可協議：GNU通用公共許可證 OR Business authorize
- 網站：http://www.minigui.com/