一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

VC中模態(tài)與非模態(tài)對話框的顯示與關(guān)閉

 piaoyedu 2013-09-01

       在windows中將對話框分為兩類:模態(tài)對話框和非模態(tài)對話框。模態(tài)對話框打開后,始終占據(jù)著當(dāng)前程序的焦點,如果不關(guān)掉對話框的話,當(dāng)前程序?qū)o法做其他工作。例如在Word里,選擇“文件|打開”命令,彈出打開對話框,此時的對話框就是一個模態(tài)對話框。非模態(tài)對話框打開時,程序可以繼續(xù)做其他工作。例如在Word里,選擇“編輯|查找”命令,彈出“查找”對話框就是非模態(tài)的。

      對于模態(tài)對話框的顯示是利用對話框類的DoModal()函數(shù)實現(xiàn)的,調(diào)用了該函數(shù)時,就創(chuàng)建了一個對話框并顯示。一旦模態(tài)對話框被創(chuàng)建并顯示出來,它就進(jìn)入一個 消息循環(huán)。此時模態(tài)對話框會將接收到的消息分發(fā)給需要接收此類消息并進(jìn)行處理。

      而非模態(tài)對話框使用對話框類的ShowWindow(SW_SHOW)來顯示對話框,而不是使用DoModal()函數(shù),一般情況下,非模態(tài)對話框的對象需要利用new操作符進(jìn)行動態(tài)的創(chuàng)建對話框?qū)ο蟆.?dāng)然C++語言中,對于利用new操作符創(chuàng)建的內(nèi)容需要使用delete操作符進(jìn)行銷毀。對于動態(tài)創(chuàng)建的對話框?qū)ο笸瑯有枰陉P(guān)閉對話框時利用delete進(jìn)行銷毀。

 

       說了這么多了,相信大家已經(jīng)懂了模態(tài)和非模態(tài)對話框的基本情況,那么在VC中是如何實現(xiàn)的呢,下面就來細(xì)細(xì)說明

(1)、模態(tài)對話框的實現(xiàn)

  新建一個基于對話框的應(yīng)用程序Test,在資源視圖中右鍵點擊Dialog,在彈出菜單中選擇“Inert Dialog”,然后根據(jù)類向?qū)陆ㄒ粋€對話框相關(guān)的類dlg1

添加主對話框上與確定鍵相對應(yīng)的消息響應(yīng)函數(shù),實現(xiàn)模態(tài)對話框的顯示,代碼如下:

     

void CTestDlg::OnOK() 
{
    // TODO: Add extra validation here
     dlg1 dlg;
 
     int result=dlg.DoModal();       //調(diào)用對話框類的成員函數(shù)
     if(result==IDOK)
              AfxMessageBox("單擊確定按鈕");
     else
              AfxMessageBox("單擊取消按鈕");

     CDialog::OnOK();
}

編譯運行便可實現(xiàn)模態(tài)對話框的顯示了

 

(2)、非模態(tài)對話框的實現(xiàn)

                   新建一個基于對話框的應(yīng)用程序Test,在資源視圖中右鍵點擊Dialog,在彈出菜單中選擇“Inert Dialog”,然后根據(jù)類向?qū)陆ㄒ粋€對話框相關(guān)的類dlg1,

   在CTestDlg類前面添加dg1的聲明語句,如下所示:

   class dlg1;
   class CTestDlg : public CDialog
   {

   ..........

   然后在CTestDlg中添加一個變量:dlg1 *pdlg;并且在CTestDlg的構(gòu)造函數(shù)中初始化為NULL,而且要在TestDlg.CPP的前面加上頭文件#include"dlg1.h"

 

   然后添加主對話框確定按鈕的消息映射,代碼如下

void CGeliangDlg::OnOK() 
{
     // TODO: Add extra validation here
     if((pdlg!=NULL)&&::IsWindow(pdlg->m_hWnd))  //判斷對話框是否已被創(chuàng)建
    {
         AfxMessageBox("對話框已經(jīng)被創(chuàng)建");
         pdlg->ShowWindow(SW_SHOW);        //已被創(chuàng)建,直接顯示
    }
   else
  {
       pdlg=new dlg1();                             //沒有被創(chuàng)建,則創(chuàng)建對象
  }
  if(!::IsWindow(pdlg->m_hWnd))
 {
    pdlg->Create(IDD_DIALOG1,this);              //創(chuàng)建對話框
    pdlg->ShowWindow(SW_SHOW);              //顯示對話框
 }
// CDialog::OnOK();
}

在添加內(nèi)存清理函數(shù),

在類視圖中右擊dlg1,選中Add Virtual Function,彈出New Virtual Overrride for class dlg1對話框,選擇PostNcDestroy,單擊AddHandler按鈕,單擊Edit Exiting按鈕,編寫代碼如下:

void dlg1::PostNcDestroy() 
{
   // TODO: Add your specialized code here and/or call the base class
    delete this;
   // CDialog::PostNcDestroy();
}

至此已經(jīng)完成了非模態(tài)對話框的顯示與銷毀了。

 

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日韩人妻免费视频一专区| 午夜福利视频偷拍91| 国产精品亚洲一级av第二区| 日本不卡视频在线观看| 国产专区亚洲专区久久| 九九热精品视频免费在线播放| 亚洲欧美黑人一区二区| 黄色激情视频中文字幕| 中文字幕乱子论一区二区三区| 国产精品亚洲综合色区韩国| 中国一区二区三区人妻 | 91人妻久久精品一区二区三区| 正在播放玩弄漂亮少妇高潮| 欧美精品一区二区水蜜桃| 美日韩一区二区精品系列| 污污黄黄的成年亚洲毛片 | 黑鬼糟蹋少妇资源在线观看| 欧洲日韩精品一区二区三区| 高清免费在线不卡视频| 国内女人精品一区二区三区| 成人国产激情在线视频| 色偷偷偷拍视频在线观看| 精品一区二区三区免费看| 亚洲中文字幕亲近伦片| 人人爽夜夜爽夜夜爽精品视频| 一二区中文字幕在线观看| 亚洲乱码av中文一区二区三区| 国产午夜精品美女露脸视频| 日本一级特黄大片国产| 日韩中文字幕人妻精品| 夫妻激情视频一区二区三区| 91欧美日韩中在线视频| 亚洲中文字幕视频一区二区 | 老熟妇乱视频一区二区| 欧美精品在线播放一区二区| 国产精品不卡高清在线观看| 精品老司机视频在线观看| 欧美精品在线播放一区二区| 亚洲一区二区精品福利| 亚洲精品美女三级完整版视频| 91亚洲国产成人久久精品麻豆|