freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

第五章基于對話框編程-資料下載頁

2024-10-09 16:00本頁面
  

【正文】 (2) 無模式對話框?qū)ο笫怯?new操作符在堆中動(dòng)態(tài)創(chuàng)建的,而不是以成員變量的形式嵌入到別的對象中或以局部變量的形式構(gòu)建在堆棧上。通常應(yīng)在對話框的擁有者窗口類內(nèi)聲明一個(gè)指向?qū)υ捒蝾惖闹羔槼蓡T變量,通過該指針可訪問對話框?qū)ο蟆? 杭州電子科技大學(xué)通信工程學(xué)院 (3) 通過調(diào)用 CDialog::Create函數(shù)來啟動(dòng)對話框,而不是 CDialog::DoModal,這是無模式對話框的關(guān)鍵所在。由于 Create函數(shù)不會(huì)啟動(dòng)新的消息循環(huán),對話框與應(yīng)用程序共用同一個(gè)消息循環(huán),這樣對話框就不會(huì)壟斷用戶的輸入。 Create在顯示了對話框后就立即返回,而 DoModal是在對話框被關(guān)閉后才返回的。在 MFC程序中,窗口對象的生存期應(yīng)長于對應(yīng)的窗口,也就是說,不能在未關(guān)閉屏幕上窗口的情況下先把對應(yīng)的窗口對象刪除掉。由于在 Create返回后,不能確定對話框是否已關(guān)閉,這樣也就無法確定對話框?qū)ο蟮纳嫫?,因此只好在堆中?gòu)建對話框?qū)ο?,而不能以局部變量的形式來?gòu)建。 杭州電子科技大學(xué)通信工程學(xué)院 4) 必須調(diào)用 CWnd::DestroyWindow而不是CDialog::EndDialog來關(guān)閉無模式對話框。調(diào)用 CWnd::DestroyWindow是直接刪除窗口的一般方法。由于默認(rèn)的 CDialog::OnOK和CDialog::OnCancel函數(shù)均調(diào)用 EndDialog,故程序員必須編寫自己的 OnOK和 OnCancel函數(shù)并且在函數(shù)中調(diào)用 DestroyWindow來關(guān)閉對話框。 杭州電子科技大學(xué)通信工程學(xué)院 因?yàn)槭怯?new操作符構(gòu)建無模式對話框?qū)ο?,因此必須在對話框關(guān)閉后,用 delete操作符刪除對話框?qū)ο?。在屏幕上一個(gè)窗口被刪除后,框架會(huì)調(diào)用 CWnd::PostNcDestroy,這是一個(gè)虛擬函數(shù),程序可以在該函數(shù)中完成刪除窗口對象的工作,具體代碼如下 : void CModelessDialog::PostNcDestroy { delete this。 //刪除對象本身 } 杭州電子科技大學(xué)通信工程學(xué)院 [例 Modeless] 創(chuàng)建并使用無模式對話框 (1) 用 MFC AppWizard(exe)創(chuàng)建一個(gè)默認(rèn)的基于對話框應(yīng)用程序 Modeless。 (2) 在該項(xiàng)目中添加一個(gè)對話框資源,將其標(biāo)識符設(shè)為 IDD_DIALOG_SECOND,標(biāo)題設(shè)為“無模式對話框”, (3) 對話框字體和大小設(shè)為“宋體, 9號”。為 IDD_DIALOG_SECOND對話框資源創(chuàng)建一個(gè) 對話框類 CSecondDlg。 杭州電子科技大學(xué)通信工程學(xué)院 (4) 按 Ctrl+W快捷鍵打開 MFC ClassWizard,從“ Class name”列表中選擇 CSecondDlg,在 IDs列表中選擇 IDOK, 是對話框中 [OK] 按鈕的標(biāo)識符,然后在 Messages框中 選擇 BN_CLICKED(單擊按鈕 )消息,單擊 [Add Function] 按鈕或雙擊 BN_CLICKED消息,出現(xiàn) “ Add Member Function”對話框以輸入成員函數(shù)的名稱,保留系統(tǒng)默 認(rèn)的函數(shù)名為 OnOK,如圖所示。 杭州電子科技大學(xué)通信工程學(xué)院 (5) 修改 CSecondDlg::OnOK函數(shù)中的代碼。 void CSecondDlg::OnOK() { // 添加其他代碼使用戶輸入對話框的數(shù)據(jù)有效 DestroyWindow()。 // 終止對話框顯示 delete this。 // 刪除對話框,釋放內(nèi)存空間 } 代碼中 , DestroyWindow是對話框基類 CWnd的一個(gè)成員函數(shù), 用來終止窗口。 (6) 添加 [Cancel]按鈕 (標(biāo)識符為 IDCANCEL)的 BN_CLICKED 消息映射,并修改其映射函數(shù) CSecondDlg::OnCancel的代碼。 void CSecondDlg::OnCancel() // 單擊 [Cancel](取消 )按鈕 { DestroyWindow()。 delete this。 } 杭州電子科技大學(xué)通信工程學(xué)院 (7)主對話框上加入一個(gè) Button控件,打開 ClassWiard,添加其點(diǎn)擊事件出現(xiàn)“ Add Member Function”對話框,取系統(tǒng)默認(rèn)的函數(shù)名 OnTestDlg,并在此成員函數(shù)中添加下列代碼: void CMainFrame::OnTestDlg() { CSecondDlg *pDlg = new CSecondDlg。 // 使用 new為對分配內(nèi)存空間 pDlgCreate( IDD_DIALOG_SECOND )。 // 創(chuàng)建對話框 pDlgShowWindow( SW_NORMAL )。 // 顯示對話框 } 代碼中, Create可用來以一個(gè)對話框資源來創(chuàng)建對話框, ShowWindow是一個(gè) CWnd成員函數(shù),用來顯示對話框, SW_NORMAL是用來指定將窗口顯示成一般常用的狀態(tài)。 杭州電子科技大學(xué)通信工程學(xué)院 (8)在文件 CSecondDlg類的文件包含 include (9)編譯并運(yùn)行。在應(yīng)用程序上,多 單擊 Button,將會(huì)在同一個(gè)位置中出現(xiàn)多個(gè)對話框,拖動(dòng)這些對話框到適當(dāng)位置,如圖 : 這就是無模式對話框的效果,從上述示例可以看出:模式和無模式對話框在用 編輯器設(shè)計(jì)和使用 MFC ClassWizard創(chuàng)建用 戶對話框類的方法是一致 的,但在對話框的創(chuàng)建和 退出的方式是不同的。 杭州電子科技大學(xué)通信工程學(xué)院 第五章 結(jié)束
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1