日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MFC—对话框程序—模式对话框与非模式对话框

發布時間:2023/12/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC—对话框程序—模式对话框与非模式对话框 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、根據主窗口類型,MFC軟件工程可以分為以下幾種架構模型:

1、SDI(Single Document Interface):單文檔界面,一個主框架窗口下只能編輯一份文檔。

例如:記事本和畫筆等。
2、MDI(Multiple Document Interface):多文檔界面,一個主框架窗口下可以同時編輯多份文檔。
例如:VC++6.0,Photoshop等軟件。
3、基于對話框的軟件模型:主窗口是通過資源管理器,在對話框模板內擺放控件編輯而成的。
多數用于開發小規模軟件,例如:任務管理器。
4、其他自定義窗口做主窗口:主窗口既不是框架也不是對話框,而是直接開發通用窗口類CWnd而成。
例如:輸入法窗口、QQ和360軟件等,有時這類軟件也都可以使用框架或對話框模式來代替開發而成。

對話框主要分為兩個類型:模式對話框和非模式對話框。當模式對話框彈出后,無法操作它的父窗口或者上一級窗口,直到關閉該對話框為止。例如:大部分軟件的“關于…”對話框,都是屬于模式對話框。當非模式對話框彈出后,不影響對它的父窗口或者上一級窗口的操作。例如:QQ的聊天框或者編輯軟件中的文字查找對話框等等。
1、模式對話框的特點是:
a)在關閉模式對話框前,無法操作背景窗口,除非自身就是主窗口;
b)使用CDialog::DoModal函數彈出模式對話框,該函數執行過程是阻塞函數;?
c)因此在棧內或者堆內申請對話框類的對象都可以的,申請棧內變量開發和運行效率高一些。
2、非模式對話框的特點是:
a)在非模式對話框運行時可以操作背景窗口;

b)使用CDialog::Create函數和CWnd::ShowWindow彈出模式對話框,該函數執行過程是非阻塞函數;?

c)不能在棧內或者堆內申請對話框類的臨時對象,需要申請堆內變量或者使用全局變量、成員變量等生命期較長的對象。

類結構圖:

模式對話框效果圖:

非模式對話框效果圖:

我在主對話框上面設置了兩個button,分別彈出模式對話框和非模式對話框。

代碼實現:

void CMFCDlg::OnButton1()?
{
?? ?//模式對話框:在棧內生成一個臨時變量,阻塞型對話框。DoModal產生的對話框,不能操作對話框后面的對話框
?? ?CAboutDlg dlg;
?? ?dlg.DoModal();
}
?
void CMFCDlg::OnButton2()?
{
?? ?//非模式對話框:必須在堆內申請對象、或者在成員變量內申請對象
?? ?CChatDlg* pDlg = new CChatDlg;
?? ?//pDlg->Create(IDD_CHAT_DLG);//父窗口是m_pMainWnd所指定的對象
?? ?pDlg->Create(IDD_CHAT_DLG, GetDesktopWindow());//不依賴與其他窗口,獨立的窗口
?? ?pDlg->ShowWindow(SW_SHOW);
}


原文:https://blog.csdn.net/huanhuanxiaoxiao/article/details/80905198?
?

總結

以上是生活随笔為你收集整理的MFC—对话框程序—模式对话框与非模式对话框的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。