[048] JUCE Diary #7: 基本架構
Projucer 創建的專案範本包含的基本元素,其相關檔案如下:
- Main.cpp
- MainComponent.cpp
- MainComponent.h
以時下流行的 MVC pattern 來類比,Main.cpp
大概就是 Controller,而 MainComponent.cpp/MainComponent.h
則是 View。Model 還沒有,視情況自己補。
上回 Projucer 建立的 GUIApp
專案的主要檔案 Main.cpp
裡頭有一個 GUIAppApplication
class(類別,以後不中譯了),繼承自 JUCEApplication
。這個 JUCEApplication
很重要,化成灰都要記住它,以後再慢慢解釋。
使用 JUCE 這類工具的好處是,雜事交給它們,我們專心辦正事。
凡事有開始就有結束,感情如是,應用程式亦然。用 JUCE 開發應用程式,以下幾點很重要:
- 從哪裡開始執行?
- 在哪裡結束?
- 如何主動要求
分手結束?
從哪裡開始執行?
JUCE 程式執行時會先建立 GUIAppApplication
(不同專案名字皆異)物件,這點從 START_JUCE_APPLICATION
(juce_Initialisation.h) 巨集可以觀察到(有原始碼的好處)。經過一連串無需理會的程式碼後,主執行緒會呼叫 JUCEApplication::initialise
method,參數為命令列參數(不包含執行檔名)。
因此,有兩處可以擺「初始化程式碼」(只執行一次的碼):
GUIAppApplication
建構式(Constructor or ctor)GUIAppApplication::initialise
建構式先來,再來才是 initialise
。通常,我會在建構式裡做成員變數初始化(member variable),其他則放到 initialise
裡。
在哪裡結束?
JUCE 程式結束時會呼叫 JUCEApplication::shutdown
method,這裡適合清理資源。另一個地方就是 GUIAppApplication
解構式。
值得留意的是 GUIAppApplication::systemRequestedQuit
這個函數會先被呼叫,預設是呼叫 quit
函數,改成什麼都不做的話,程式就不會結束,所以 shutdown
就不會被呼叫。(沒事不會去改 systemRequestdQuit
)
如何主動要求結束?
讓程式結束的方法很簡單,即呼叫 GUIAppApplication::systemRequestedQuit
。