Mfc模態對話框:
創建模態對話框:
【模態對話框:具有獨占行為,必須由用戶完成對當前對話框的響應,才能對本對話框所屬的進程進行其他操作】
例如:
我們創建一個加法計算器。點擊計算之后,彈出一個對話框,當用戶點擊完確定之后。才進行計算,如果點擊取消,則不進行計算。
把上次那個反復敲幾遍就會啦,我本身也是邊做博客邊在背。寫過一遍,就是比較有作用。
我懶了,就按照上一講制作的東西接着往下寫了。
以下正文:
一、界面部分
經常從下面這四個選項卡來回點點,要不每次我說的是啥你都不知道,,,開始我也不敢點。。。笑哭。。。
右鍵Dialog
點擊插入
2、
發現兩點變化:
1、多出了一個東西,那必須是我們要求創建的對話框了
2、主要操作界面里面也出了新的對話框界面。
/*bug2:繼昨天的改名風波之后。【不改名,就添加不了變量】這個作為一個提示對話框玲瓏一些會比較好。所以我們選中它把它變小。從圖像界面的右下角點擊那個小黑點兒,往左上方拖拽。
發現確定沒了,然后后來程序的運行就比較詭異了,各種東西的操作也不聽使喚了。所以跟緊我。然后如果在看博客運行的同時發現了問題,歡迎評論討論。
*/
3、先把確定按鈕,往左上方,放放省的被擠沒了。
1)點擊確定按鈕,進行拖拽。
2)然后同時進行其他控件的調整。
3、添加一個靜態文本進行提示:是否要進行計算呢?【這個上一講說過啦,就不再寫了】
4、界面就好啦。
二、代碼鏈接
彈出對話框后,如此點擊:
給一個類名,這個名字的來源:c應該是取class的意思,tip提示嘛,dlg對話框的簡寫。
人品爆了。。。笑哭
之前創建之后,在這個IDD_DIALOG1下面都會報錯誤的。也可能這次着急了沒有改id導致沒有報錯。。。總之這里報錯與否都不影響我們繼續往下進行。
有了對應的類,接下來,當我們按下按鈕。創建該對象的實例,然后得到當前對話框返回的按鈕的值,從而決定是否進行操作。
所以,上面這句話就是就是算法了,【我眼中的算法,或許可以寫點兒什么,或許10年之后當我再次看到這個博文的時候可能感觸又不一樣了呢。。。那個時候可以再看看人月神話,一定會有新的領悟。】只是算法很簡單。幾乎不需要思考,所以不用數學對問題進行處理的算法,就是在拿英文寫故事。所以這點上來講,我們編程確實需要一些英文功夫。
算法的切入點在“當我們按下按鈕”。
然后我們要創建 CTipDlg類型的對象,首先要引入這個對象的頭文件。
#include "TipDlg.h"
這么一大段話,就是想說,這個包含頭文件的操作,應該放在我們雙擊按鈕之后到達的那個cpp文件里面,在當前這篇博客里面他就是MyAdditionComputer.cpp 文件里面。
然后在上次我們寫代碼的地方繼續這樣寫:
//也就是在這個文件里面,加上包含頭文件那句話。
void CMyAdditionComputerDlg::OnBnClickedButton1()
{
INT_PTR nRes;//typedef _W64 int INT_PTR 又把__W64 定義成 _W64...笑哭。。。
CTipDlg tipDlg;//聲明一個CTipDlg的對象 tipDlg
nRes = tipDlg.DoModal();//對象創建模型賦給那個整形指針。
if (nRes ==IDCANCEL){//整形指針的結果如果是退出
return;//就返回,對於當前這個按鈕按下事件的處理結束。
}
//否則 說明點擊的是確定,那么繼續往下執行。運算並得到結果。
// TODO: 在此添加控件通知處理程序代碼
UpdateData(true);//見名知意,更新數據。不過它到底是什么呢?雙擊UpdateData這個單詞。按下F12
//得到下面這樣一個函數
c = a + b;//記得我們之前寫的 a 和 b 還有c 嘛,就是他們了,分別指定了int型的變量abc。然后做加法
UpdateData(false);
}
三、運行與結果:
除了這個框框:
點擊取消:
不會計算。
點擊確定
完成計算。
證明這是個模態窗口,在點擊完運算之后,隨意的點擊這個對話框上面的其他內容,可以看看是不是有響應。
下面一講將介紹,非模態窗口,就是當前對話框它彈它的,后面的內容可以繼續執行,要怎么做。