a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

VC MFC非模態對話框的實現方法

2020-01-26 15:27:31
字體:
來源:轉載
供稿:網友

眾所周知的,MFC中非模態對話框在顯示后,程序其他窗口仍能正常運行,可以響應用戶輸入,還可以相互切換。本文就來給大家講解一下非模態對話框的實現方法:

一、非模態對話框的對話框資源和對話框類

實際上,模態對話框和非模態對話框在創建對話框資源和生成對話框類上是沒有區別的,因此,在創建模態對話框時所創建的IDD_TIP_DIALOG對話框資源和CTipDlg類都不需要修改。

二、創建及顯示非模態對話框的步驟

需要修改的是,對話框類實例的創建和顯示,也就是之前在CAdditionDlg::OnBnClickedAddButton()函數體中添加的對話框顯示代碼。下面是具體步驟:

1. 在AdditionDlg.h中包含CTipDlg頭文件并定義CTipDlg類型的指針成員變量。詳細操作方法是,在AdditionDlg.cpp中 刪除之前添加的#include "TipDlg.h",而在AdditionDlg.h中添加#include "TipDlg.h",這是因為我們需要在AdditionDlg.h中定義CTipDlg類型的指針變量,所以要先包含它的頭文件;然后在 AdditionDlg.h中為CAdditionDlg類添加private成員變量CTipDlg  *m_pTipDlg;。

2.在CAdditionDlg類的構造函數中初始化成員變量m_pTipDlg。如果cpp文件中函數太多,我們可以在Class View上半個視圖中找到CAdditionDlg類,再在下半個視圖中找到其構造函數雙擊,中間客戶區域即可馬上切到構造函數的實現處。在構造函數體中 添加m_pTipDlg = NULL;,這是個好習慣,在任何指針變量使用前都初始化,可以避免因誤訪問重要內存地址而 破壞此地址的數據。

3.添加非模態對話框的創建和顯示代 碼。VC++中注釋單行代碼使用“//”,注釋多行代碼可以在需注釋的代碼開始處添加“/*”,結束處添加“*/”。修改后的 CAdditionDlg::OnBnClickedAddButton()

函數如下:

void CAdditionDlg::OnBnClickedAddButton() {   // TODO: Add your control notification handler code here   /*INT_PTR nRes;       // 用于保存DoModal函數的返回值   CTipDlg tipDlg;      // 構造對話框類CTipDlg的實例   nRes = tipDlg.DoModal(); // 彈出對話框   if (IDCANCEL == nRes)   // 判斷對話框退出后返回值是否為IDCANCEL,如果是則return,否則繼續向下執行     return;*/    // 如果指針變量m_pTipDlg的值為NULL,則對話框還未創建,需要動態創建   if (NULL == m_pTipDlg)   {     // 創建非模態對話框實例     m_pTipDlg = new CTipDlg();     m_pTipDlg->Create(IDD_TIP_DIALOG, this);   }   // 顯示非模態對話框   m_pTipDlg->ShowWindow(SW_SHOW);    // 將各控件中的數據保存到相應的變量   UpdateData(TRUE);    // 將被加數和加數的加和賦值給m_editSum   m_editSum = m_editSummand + m_editAddend;    // 根據各變量的值更新相應的控件。和的編輯框會顯示m_editSum的值   UpdateData(FALSE); }

4.因為此非模態對話框實例是動態創建的,所以需要手動刪除此動態對象來銷毀對話框。我們在 CAdditionDlg類的析構函數中添加刪除代碼,但是MFC并沒有自動給出析構函數,這時需要我們手動添加,在對話框對象析構時就會調用我們自定義 的析構函數了。在AdditionDlg.h文件中為CAdditionDlg添加析構函數聲明:~CAdditionDlg();,然后在 AdditionDlg.cpp文件中添加析構函數的實現,函數體如下:

  CAdditionDlg::~CAdditionDlg()   {     // 如果非模態對話框已經創建則刪除它     if (NULL != m_pTipDlg)     {       // 刪除非模態對話框對象       delete m_pTipDlg;     }   } 

這樣,非模態對話框創建和顯示的代碼就添加修改完了。
這只是一個簡單的例子,到這里相信大家對于對話框的使用更上了一個臺階了,可以在不同的情況下可以選擇使用模態對話框和非模態對話框了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 久久国产精品久久久久久 | 午夜精品久久久久久久久久久久久 | 国产一区二区三区久久 | 国产成人精品999在线观看 | 国产激情毛片 | 亚洲国产成人精品女人 | 国产一区二区不卡 | 狠狠色噜噜狠狠狠狠2018 | 日韩极品在线 | 欧美福利视频 | 中文字幕在线观看精品视频 | 中文精品一区二区三区 | 国产情侣免费视频 | 国产97碰免费视频 | 精品九九九 | 久久精品中文字幕 | 久色电影 | 美女一级黄 | 久久影音先锋 | 一区二区精品在线 | 国产精品自产av一区二区三区 | 91精品久久久久久久久久入口 | 久久久片| 麻豆精品久久 | 国产精品久久在线观看 | 欧美日韩亚洲视频 | 免费久久精品 | 国产一区二区免费电影 | 婷婷国产 | 成人免费在线电影 | 欧美午夜精品久久久久免费视 | 亚洲精品免费观看 | 久草网址 | 成人av影视在线观看 | 日韩一区二区在线播放 | 成人一级网站 | 久草电影网| 国产精品久久久久久久久久东京 | 国产精品原创巨作av色鲁 | 一区二区免费视频 | 再深点灬舒服灬太大了添少妇视频 |