C++Builder控制窗體何時(shí)駐留內(nèi)存_第1頁(yè)
C++Builder控制窗體何時(shí)駐留內(nèi)存_第2頁(yè)
C++Builder控制窗體何時(shí)駐留內(nèi)存_第3頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、4.3窗體的更多細(xì)節(jié)使用ide創(chuàng)建一個(gè)窗體的同時(shí),c+builder會(huì)自動(dòng)地通過(guò)在winmain ()函數(shù)中加入代 碼來(lái)在內(nèi)存中創(chuàng)建窗體。這也是一般所需的方式,可以不必去改變。也就是說(shuō),在整個(gè)程序 范圍內(nèi)主窗口是一直存在的,所以為主窗口創(chuàng)建窗體吋,可以不必改變c+builder的缺省 方式。不過(guò),你可能不希望在程序運(yùn)行時(shí),所有應(yīng)用程序的窗體都駐留在內(nèi)存屮,若不希望應(yīng)用 程序的對(duì)話框同時(shí)留在內(nèi)存中,可以在需要的時(shí)候動(dòng)態(tài)地創(chuàng)建它們。窗體可分為模態(tài)(modal)和非模態(tài)(modeless)兩類(lèi),模態(tài)窗體指的是用戶(hù)在切換到其 他窗體z前需與z交互的窗體(例如,對(duì)話框就要求用戶(hù)的輸入)。非模態(tài)窗體是指-

2、直顯 示的窗口,直到用戶(hù)關(guān)閉或?qū)⑵渥钚』?,或者是被其他窗口蓋住。4.3.1控制窗體何時(shí)駐留內(nèi)存缺省時(shí)c+builder會(huì)通過(guò)在應(yīng)用程序的winmain()函數(shù)中加入下列代碼,自動(dòng)地在內(nèi)存中 創(chuàng)建應(yīng)用程序主窗體。application ->createform(_classid(tmainfrm),&mainfrm);這個(gè)函數(shù)創(chuàng)建了一個(gè)與窗體同名的全局變呈:,應(yīng)用程序中的每個(gè)窗體都對(duì)應(yīng)一個(gè)全局變呈:, 這個(gè)變量是指向窗體類(lèi)的實(shí)例的指針,并在程序運(yùn)行的同用于引用窗體,所有包含窗體頭文 件(.h)的源代碼(.cpp)文件都可以通過(guò)這個(gè)變量來(lái)訪問(wèn)窗體。因?yàn)榇绑w被加入到winmain ()

3、函數(shù)中,所以當(dāng)程序一激活,窗體就會(huì)出現(xiàn),同時(shí)在整 個(gè)應(yīng)用程序運(yùn)行時(shí)都駐留在內(nèi)存中。1. 顯示自動(dòng)生成的窗體假如選擇在程序啟動(dòng)時(shí)創(chuàng)建窗體,但想在稍后再顯示它,這時(shí)町在窗體事件處理程序中用 show modal方法來(lái)顯示一個(gè)已存在于內(nèi)存中的窗體。在這種情況下,由于窗體已存在于內(nèi)存屮,故不用再創(chuàng)建另一個(gè)實(shí)例或析構(gòu)那個(gè)實(shí)例。2. 動(dòng)態(tài)創(chuàng)建窗體冇時(shí)不希望應(yīng)用程序中的所冇窗體都駐留在內(nèi)存中,為減少程序載入時(shí)所需的內(nèi)存數(shù),可 以在需要使用某些窗休時(shí)才創(chuàng)建它們。例如,對(duì)話框就只在用戶(hù)需和它交互時(shí)才需出現(xiàn)在內(nèi) 存中。為在運(yùn)行時(shí)不同階段使用ide創(chuàng)建窗體:1)從組件欄中選擇filenewform菜單項(xiàng)以顯示新窗體

4、。2)從projcctoptionsforms頁(yè)中的自動(dòng)創(chuàng)建的窗體列表中,將該窗體刪除。這也就是從 winmain ()函數(shù)屮刪除窗體的調(diào)用,也可自行從winmain ()函數(shù)屮刪除下而這一行:3)需要調(diào)用窗體時(shí),對(duì)于非模態(tài)窗體可使用show方法,對(duì)于模態(tài)窗體可使用showmodal 方法。上窗體的事件處理程序必須創(chuàng)建結(jié)果窗體的實(shí)例,并負(fù)責(zé)刪除已調(diào)川結(jié)果窗體的方式之 一是使用全局變量,如下所示。注$ resultsform是一個(gè)模態(tài)窗體,處理程序?qū)⑹褂?showmodal 方法。例中事件處理程序會(huì)在窗體關(guān)閉z后刪除它,因此若需要在應(yīng)用程序的其他地方使用 resultsform,就需要使用new

5、重新創(chuàng)建它,若窗體是使用show方法顯示的,則不能在文 件處理程序中刪除它,因?yàn)閟how需在窗休是打開(kāi)時(shí)返回。注重使川new操作符創(chuàng)建窗體時(shí),要確保該窗體不在projectoptionsforms頁(yè)的自動(dòng)創(chuàng)建 窗體的列表屮,確切地說(shuō),假如創(chuàng)建一個(gè)窗體而沒(méi)行從自動(dòng)創(chuàng)建窗體列表中刪除同名的窗體, 則c+builder會(huì)在啟動(dòng)時(shí)創(chuàng)建窗體,同時(shí)事件處理程序會(huì)創(chuàng)建一個(gè)新的實(shí)例,并會(huì)重載對(duì) 門(mén)創(chuàng)建實(shí)例的引用,門(mén)動(dòng)創(chuàng)建的實(shí)例雖存在,但m用程序無(wú)法再訪問(wèn)到它。而當(dāng)事件處理程 序結(jié)束時(shí),全局變量不再指向一個(gè)有效窗體,所有對(duì)該全局變量的調(diào)用都町能會(huì)造成應(yīng)用程 序崩潰。3. 創(chuàng)建窗口之類(lèi)的非模態(tài)窗體只要窗體仍在使用

6、,就必須保證非模態(tài)窗體的引用變量的存在,也就是說(shuō)這此變量必須有 全局范圍,人多數(shù)情況卜,必須使用窗體創(chuàng)建吋牛:成的全局變量(變量名和窗體的name屬 性相同),假如應(yīng)用程序需要窗體的額外的實(shí)例,必須為每個(gè)實(shí)例聲明單獨(dú)的金局變量。4. 使用局部變量創(chuàng)建窗體實(shí)例創(chuàng)建模態(tài)窗體個(gè)別實(shí)例的較安全方法是在事件處理程序中使川局部變量作為新實(shí)例的引 用。假如使用局部變最,就可以不必關(guān)心resultsform是否為白動(dòng)創(chuàng)建的了,事件處理程序 的代碼不會(huì)引用全局窗體變量。例如:可以注重在這個(gè)事件處理程序屮沒(méi)有使用窗體的全局實(shí)例。應(yīng)用程序一般使用窗體的全局 實(shí)例。不過(guò),若需要模態(tài)窗體的新實(shí)例。或是在應(yīng)用程序的個(gè)別的塊(例如某一個(gè)函數(shù))小 使用窗體。使用局部實(shí)例則是最安全有效的方式

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論