本人剛學mfc沒多久,今天洗碗的時候想著白天遇到的一個問題,雖然百度后解決了。但是深思的時候還是有一個疑問。這個疑問和早上的問題不是很相關,但也有一點關聯。問題比較抽象,我不知道我能不能描述的清楚,我盡量吧。是這樣的
學mfc之前我看了一下C++的基礎知識。我們一般都是在c++看到的函式形式都是這樣的
class A{
···//成員函式和成員資料
};
int main(){
A a;
return 1;
}
一般都是這種形式,我們在創建一個類時,并不會占用記憶體空間。只有類在實體化之后才會占用記憶體空間。也就是A a有了這句話物件a才會占用記憶體空間。
但是在mfc中,我新建了一個工程,然后一步一步設定好,中間有一步驟我勾選的是基于對話框。設定完后,系統就自動生成了一個主對話框。然后左邊就是一個app.cpp和一個dlg.cpp,還有各種的.h檔案和一些資源檔案。我撰寫程式都是在***dlg.cpp上添加各種代碼。也就是說我只是在***dlg這個類里面進行各種操作。
我的疑問時系統生成的這個對話框是誰創建的。我覺得總該有個類似于上面這樣***dlg a;代碼才能創建對話框吧。不然怎么生成對話框。這樣就引申出我早上的一個問題。我在類中的一個靜態函式里訪問一個非靜態函式,我就需要用物件名.函式這樣訪問。但是這個主對話框我都不知道是誰創建的,我怎么用物件名去訪問。用專業術語講就是獲得父視窗指標的意思。
說了這么多,不知道有沒有講明白。還望大神不吝賜教,盡量講的詳細些
uj5u.com熱心網友回復:
“系統生成的這個對話框是誰創建的。” 對話框工程 里 主對話框 是MFC 創建的。用 CWnd* AfxGetMainWnd( );得到
uj5u.com熱心網友回復:
即CxxxDlg* pDlg=(CxxxDlg* )AfxGetMainWnd();
uj5u.com熱心網友回復:
基于對話框的App, 留意一下 App類里的 InitInstanceuj5u.com熱心網友回復:
“我覺得總該有個類似于上面這樣***dlg a;”你的理解是正確的,只是沒找到地方看見而已。這個東東在 App類里的 InitInstance函式里有代碼體現
uj5u.com熱心網友回復:
仔細看mfc 自動創建的app dlg那幾個類
uj5u.com熱心網友回復:
系統向導幫你創建的uj5u.com熱心網友回復:
看你的App類的InitInstance函式~uj5u.com熱心網友回復:
謝謝,我看到了。但是還有一個疑問。在app.cpp里的initInstance里看到這個代碼。***Dlg dlg;也就是說這個主對話框是由dlg這個物件創建的。可是這個創建的也是區域物件,不是全域物件。我想在dlg.cpp里的一個靜態函式下面訪問非靜態函式,比如我想dlg.SetDlgItemText()就不行,因為不是全域物件uj5u.com熱心網友回復:
SetDlgItemText(AfxGetMainWnd()->GetSafeHwnd(), IDC_XXXX, TEXT(""));uj5u.com熱心網友回復:
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈uj5u.com熱心網友回復:
這個對話框是MFC框架自動創建的,在App類里的 InitInstance函式里有呼叫的代碼。同時,靜態函式不能呼叫非靜態的函式或者變數
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/43659.html
標籤:基礎類
