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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

模态对话框与非模态对话的几种销毁方法与区别

發布時間:2023/12/9 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模态对话框与非模态对话的几种销毁方法与区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

From: http://renjwjx.blog.51cto.com/811549/191320/


前幾天發現自己的程序中使用非模態對話框,Debug版本有警告提示如下:

Warning: calling DestroyWindow in CWnd::~CWnd OnDestroy or PostNcDestroy in derived class will not be called

由于是Warnning,就沒有太在意,后來隨意上網一找發現,這個問題還是很嚴重的問題。

最后,發現有些基本問題我還沒有搞清楚。同時在這個過程中,也學習了不少新東西,網上關于這個問題的資料很多,感覺真正把問題講清楚的不多。今天我就來個總結,同時,也把網上有些人的疑問給解答下,更重要的是自己以后忘記了,可以回來參考。

?

先說下模式對話框調用的原則。(就是一定要先關了這個對話框才能操作后面窗口的對話框)

模式對話框下,用CDialog::OnOK()或CDialog::OnCancel()以及CDialog::OnClose()關閉對話框。

一定要注意之前的CDialog::(當然,你可以重載你自己對話框的這個虛函數,但是,后面必須調用基類的CDialog::

具體我們再參照深入淺出的風格,來個解刨。?

CDialog::Close()默認調用CDialog::OnCancel() , CDialog::OnCancel()調用CDialog::EndDialog(IDCANCEL);

CDialog::EndDialog調用CDialog::DestroyWindows(),CDialog::DestroyWindows調用CDialog::OnDestroy() ;


CDialog::OnOK()默認先CDialog::UpdateData(),然后再調用CDialog::EndDialog(IDOK).

CDialog::EndDialog調用CDialog::DestroyWindows(), CDialog::DestroyWindows調用CDialog::OnDestroy()???

看來上面你可能就知道了如下的等式

CDialog::Close() == CDialog::OnCancel() == CDialog::EndDialog(IDCANCEL)一樣。

CDialog::OnOK() == CDialog::EndDialog(IDOK).

CDialog::EndDialog(IDOK)跟CDialog::EndDialog(IDCANCEL)的區別就是,少了一個CDialog::UpdateData(),也就是CDialog::EndDialog(IDOK),在關閉對話框后,會把對話框上控件關聯的變量的值更新為用戶最后輸入的值。而CDialog::EndDialog(IDCANCEL)就不會更新這個值。

希望自己把模式對話框的關閉講清楚了。

?

下面說說非模態對話框

調用原則是:
在無模式對話框,重載你自己的OnOK(),就是CMyDialog::OnOK()調用CDialog::DestroyWindows()。注意:不是默認的CDialog::OnOK()來關閉對話框。

重載CMyDialog::OnCancel()調用CDialog::DestroyWindows()。注意:不是調用默認的CDialog::OnCancel(),來關閉對話框。

?

聽起來很簡單,但是下面提到一個很具體的編程問題。

一般,我們用非模態對話框都是全局的,也就是通過new來創建,是在heap上的,而不是在stack上的。

這樣我們當然還要通過delete 來銷毀對象,不然可是有內存泄漏的。那么我們什么時候delete這個對象呢?

在msdn上面我們可以看到微軟提供的方法是,

我們要重載PostNcDestroy(),即我們要實現CMyDialog::PostNcDestroy(),內容如下

CMyDialog::PostNcDestroy(){ CDialog::PostNcDestroy(); delete this;}

?

這樣的話,我們的類就會Auto-Cleanup了。

?

msdn的建議,英文的,當初我看了2遍沒看懂。現在在回頭去看,才發現比較簡單。但讓現在你看了這篇blog后就不用看這個了。

http://msdn.microsoft.com/en-us/library/5zba4hah.aspx


總結

以上是生活随笔為你收集整理的模态对话框与非模态对话的几种销毁方法与区别的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 小视频在线| 欧美久久久久久久久久久 | 成人免费版 | 午夜xx | 99久久国产热无码精品免费 | 97人人草| 免费看日韩av | 九九热免费视频 | 黑丝袜av| 中国少妇初尝黑人巨大 | www.久热| 亚洲精品成a人在线观看 | 在线v| 波多野结衣一本 | 丰满少妇在线观看bd | 色婷婷一区二区 | 久久婷婷五月国产色综合激情 | 男人天堂资源 | 国产v亚洲v天堂无码久久久 | 精品人妻无码一区二区三区换脸 | 久草电影网站 | 一级黄色欧美 | 伊人宗合| 亚洲午码 | 一级全黄裸体免费观看视频 | 精品国产区 | 久久精品这里有 | 久久久久久国产免费a片 | 成人特级片 | 亚洲精品久久久久久无码色欲四季 | 成人免费a视频 | av集中营 | 在线免费观看视频黄 | 精品国产伦一区二区三区免费 | 欧美三级自拍 | www.夜夜骑| 亚洲三级黄色片 | 巨胸喷奶水www久久久免费动漫 | 人人爱av | 中文国产在线观看 | 亚洲人女屁股眼交6 | 快播日韩 | 亚洲一在线 | 美女三级网站 | 久久国产乱 | 日本人妻不卡一区二区三区中文字幕 | va婷婷在线免费观看 | 全程偷拍露脸中年夫妇 | 天天干,天天爽 | 一级黄色网 | 久久伊人五月天 | 免费日本黄色网址 | 操网站| jizzjizzjizz亚洲| 亚洲一区电影网 | 日本久草视频 | 2019中文字幕在线观看 | 日本熟妇毛茸茸丰满 | 一区二区在线视频免费观看 | 青春草在线视频免费观看 | www.com久久 | 中文精品视频 | 91福利区 | 久久精品97 | 国产人妻人伦精品1国产 | 中文字幕一区二区三区久久久 | 欧美另类色图 | wwwxx在线 | 亚洲第三十七页 | 国产精品无套 | 日韩av电影在线播放 | 黄色片子免费 | 在线观看免费中文字幕 | 韩国久久久 | 伊人久操 | 91久久电影 | 婷婷久久精品 | 日本成人片网站 | 亚洲av无码潮喷在线观看 | 亚洲精品国产精品乱码不卡√香蕉 | 91网站免费看 | 国产美女视频免费观看下载软件 | 国产精品免费久久久久 | 亚洲黄网站在线观看 | 日本一区不卡在线观看 | 久久激情综合 | 少妇高潮灌满白浆毛片免费看 | 久久精品亚洲a | 182tv午夜| 97在线观看免费视频 | 亚洲精品一区二区三区不卡 | 日韩视频在线免费观看 | 久久女| 精品国产乱码久久久久久牛牛 | 91av在线播放| 国产9区 | 91中文字幕在线视频 | 无码精品人妻一区二区三区漫画 | 日韩亚洲在线观看 |