幾乎所有正式一點的C++ Builder程序除了主窗體外都還有從屬窗體,有時是對話框,有時是無模式窗口。VCL使得創建和顯示從屬窗體都易如反掌。但不是所有程序都適於采用無模式窗體,有些程序需要在一個主窗體內顯示不同的內容。本文討論如何將一個從屬窗體“寄居”於主窗體中,從屬窗體看上去是主窗體的一部分,用戶甚至不知道一個從窗體正被顯示。圖A顯示了一個主窗體,其客戶區是一個從窗體。
理解子/父聯系
這類程序的基本思路是讓所有從屬窗體都作主窗體的子窗體,這種設計在其他框架(如OWL或MFC)中很常見,但在VCL程序中卻不常見。VCL不允許簡單地指定一下屬性就使一個窗體從屬於另一窗體,要做到這一點還得付出點小小的勞動。你得告訴Microsoft Windows從屬窗體是主窗體的子對象,在C++ Builder編程中一般趨於認為窗體是窗口,元件是子對象,實際上從Windows的觀點來看,窗體和元件都是窗口。可以將任一窗口
(窗體和元件)指定為另一窗口的子對象,只要你暫時跳出VCL圈子。
更好的“鼠夾”
將一個窗體附屬於一個主窗體的一個好處是你可以象設計任何其他從屬窗體一樣設計子窗體,就是說你創建一個新的窗體,在其上添加元件並書寫這個窗體的代碼。這樣使得設計你的子窗體變得容易,並將所有操縱子窗體的代碼集中在一個地方。
程序設計范例
先給出一些程序的背景,程序名叫PARENTING,有一個主窗體,主窗體的頂部和底部各有一個工具條(Tool Bar)和狀態條(Status bar),除主窗體外,還有兩個子窗體,一個叫TTableForm,用柵格顯示ANIMAL.DBF數據表,ANIMAL表是C++ Builder帶的數據庫樣本的一個表。另一個子窗體TChartForm用Tchart顯示ANIMAL表。(如果你購買的C++ Builder是標准版則沒有數據庫元件)你可以通過點擊菜單項或工具按鈕來選擇顯示表單還是圖形窗體,在你作出選擇時,活動窗體被摧毀而被選窗體被顯示,子窗體在主窗體的工具條下方、狀態條上方的客戶區顯示,而且隨主窗體大小變動而隨時保持充滿客戶區。