FAQ1:pDlg

FAQ1:pDlg

2010-10-26 10:37:29
Q0:CNetphonedlg* pDlg 是什麼指針數據?
pDlg->GetDlgltem(IDC_BUTCOMMUNICATE)->EnableWindow(TRUE)
->是什麼意思?
GetDlgltem(IDC_BUTCOMMUNICATE)是什麼意思?
EnableWindow(TRUE)是什麼意思? 
A0:CNetphonedlg* pDlg很明顯是個對話框指針,但具體是什麼對話框要看你的工程。
IDC_BUTCOMMUNICATE是對話框pDlg上某個控件的ID,pDlg->GetDlgltem(IDC_BUTCOMMUNICATE)這句的意思是得到對話框pDlg上ID爲IDC_BUTCOMMUNICATE的控件指針,然後執行後面的操作:EnableWindow(TRUE) ,它是使得該控件的狀態變爲可用
->的作用是引用成員,比如CNetphonedlg* pDlg,這裏的CNetphonedlg是一個類,pDlg是一個對象指針,我們就可以使用pDlg->來訪問類CNetphonedlg的成員函數或成員變量。

Q1:CTestDlg *pdlg=new CTestDlg怎麼可以這樣
A1:new是一個操作符,返回的是一個指針,就這麼簡單,pdlg是一個指針,這個指針指向剛new出來的對象。

Q2: CTestDlg *pdlg = new CTestDlg;
爲什麼不這樣寫:CTestDlg *pdlg = new CTestDlg(),即在最後面加一個括號。
A2: new CTestDlg;說明要創建一個CTestDlg類的實例,而CTestDlg()是這個類的構造函數,你怎麼可能爲一個函數開闢內存空間呢?這兩種寫法的意義是不同滴~~!
 

Q3 能不能詳細解釋一下
 
CMyDlg   *pDlg; 
pDlg-> 
CMyDlg   Dlg; 
Dlg. 
的各自使用,區別
A3.1 前面是個實例指針,後面是個實例
A3.2 CMyDlg   Dlg要調用默認的構造函數,前面不用。
A3.3 後面那個是真正有這麼一個東西   CMyDlg的對象存在。 
   而前者只是一個指針,說是要指向一個CMyDlg的對象,可這個對象在哪兒?如果沒有指定便使用,就會出錯。一般是new一個CMyDlg,讓這個指針指向它
A3.4 CMyDlg   *pDlg;是一個指針,用的時候要初始化,要不讓它指向於一個已存在的對象,要就new一個新的對象,pDlg=new   CMyDlg   ;這樣的話,不用的時候要記得刪除它(delete   pDlg),用的時候還要create()和showwindow()。
 
CMyDlg   Dlg;是一個實例對象,可以直接用它,但也要create()和showwindow()。只是不用刪除它,程序退出的時候自己會刪除它

Q4:m_pDlg->GetSafeHwnd() 這個函數什麼意思
A4:CWnd::GetSafeHwnd
HWND GetSafeHwnd( ) const;

返回值:
返回窗口的句柄。如果CWnd對象沒有與一個窗口連接或它使用的CWnd指針爲NULL,則返回NULL。
當我們想得到一個窗口對象(CWnd的派生對象)指針的句柄(HWND)時,最安全的方法是使用GetSafeHwnd()函數,而你前面用m_pDlg調用它,說明你獲得的是m_pDlg是指向一個CDialog對象的句柄。
再獲得了一個對話框的句柄之後,你就可以通過這個句柄對對話框做出幾乎任何的操作。你的if(m_pDlg->GetSafeHwnd()==0)可以判斷這個對話框的是否有句柄,如果句柄值爲零說明你的對話框有問題,也就可以判斷下面的東西了。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章