當前位置:
首頁 >
鸡啄米:模态、非模态对话框
發布時間:2025/3/21
42
豆豆
生活随笔
收集整理的這篇文章主要介紹了
鸡啄米:模态、非模态对话框
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
模態對話框:
(1)找到視圖,添加一個“對話框”資源作為模態對話框(即:插入 Dialog(E));
(2)再給該模態對話框資源在添加類,類名為CTipDlg。
右鍵新加入的對話框,添加類,輸入類名CTipDlg再點擊確定。
(3)再將模態對話框的頭文件#include"CTipDlg.h"添加到當前項目“項目名Dlg.Cpp” 中去。
注:添加頭文件的位置應該在原本頭文件的下面。
---------------------------------------------------------------------------------------------
(4)雙擊“打開模態對話框”按鈕,進入事件處理函數,添加下面的代碼,用來調用模態對話框。
INT_PTR nRes; // 用于保存DoModal函數的返回值
CTipDlg tipDlg; //定義一個模態對話框的對象
nRes = tipDlg.DoModal(); // 彈出該模態對話框
if (IDCANCEL == nRes) // 判斷對話框退出后返回值是否為IDCANCEL
return;
(5)給模態對話框中添加控件以及代碼
========================================================================================
非模態對話框:(1)必須聲明一個指向CTipDlg類的指針變量 (2)需要顯示的調用ShowWindow()才能將對話框顯示出來。步 驟 1、添加一個“對話框”資源作為非模態對話框;再給該對話框資源在添加類,類名為CTipDlg ; 2、處理____Dlg.h頭文件: ①在____Dlg.h中加上#include"TipDlg.h" (注:此處和模態對話框不同) ②在____Dlg.h中為____Dlg類添加private成員變量即:CTipDlg *m_pTipDlg; ③在____Dlg類的構造函數中初始化成員變量m_pTipDlg。即: 在構造函數體中添加m_pTipDlg = NULL; 3、雙擊按鈕,添加按鍵處理事件,代碼如下:if (NULL == m_pTipDlg)// 如果指針變量m_pTipDlg的值為NULL,則對話框還未創建,需要動態創建 { // 創建非模態對話框實例 m_pTipDlg = new CTipDlg(); //【注】 此處new,必須在析構函數中delete釋放m_pTipDlg->Create(IDD_TIP_DIALOG, this); //注:IDD_TIP_DIALOG應改成對話框二的ID} m_pTipDlg->ShowWindow(SW_SHOW); // 顯示非模態對話框 4、定義析構函數進行手動刪除new出來的非模態對話框。 ①先在_____Dlg.h文件中為C____Dlg添加析構函數聲明:~C_____Dlg(); ②然后在_____Dlg.cpp文件中添加析構函數的實現,函數體如下: 注:此處的下劃線填寫工程的名稱(而不是非模態對話框類的名稱)! C____Dlg::~C_____Dlg() { // 如果非模態對話框已經創建則刪除它 if (NULL != m_pTipDlg) { // 刪除非模態對話框對象 delete m_pTipDlg; } } 執行結果圖: 有兩種創建方法: (1) 采用局部變量創建一個非模態對話框 雙擊按鈕,添加下面的代碼CTestDialog *pTD = new CTestDialog();pTD->Create(IDD_DIALOG1); //創建一個非模態對話框pTD->ShowWindow(SW_SHOWNORMAL); //顯示非模態對話框 因為指針在聲明的時候是被放在堆棧中,只有整個應用程序關閉后才會被銷毀,所以可以正常顯示對話框。這種方法雖然不影響程序的運行,可是指針pTD所指向的內存卻導致不可用,這樣的編程很不好。(2)采用成員變量創建一個非模態對話框首先在你所要編寫的類的頭文件中聲明一個指針變量: private:CTestDialog *pTD; 然后再在相應的CPP文件,在你要創建對話框的位置添加如下代碼: 雙擊按鈕,添加下面的代碼pTD = new CTestDialog(); //給指針分配內存pTD->Create(IDD_DIALOG1); //創建一個非模態對話框pTD->ShowWindow(SW_SHOWNORMAL); //顯示非模態對話框 最后在所在類的析構函數中收回pTD所指向的內存:delete pTD; 模態對話框嵌套的總思路:先插入一個新的對話框為該對話框修改ID后,添加類此時就可以在對話框上創建控件和消息處理函數了 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的鸡啄米:模态、非模态对话框的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鸡啄米:添加控件变量
- 下一篇: MFC显示JPG、JIF图片