作者srxrrr (幹!我是肌董)
看板C_and_CPP
標題[問題] MFC GetDlgItem的用法
時間Tue Oct 8 17:25:11 2013
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++ 2010
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
MFC
問題(Question):
在使用MFC時,常可看到下述的指令
CButton *a;
a=(CButton*)GetDlgItem(IDC_BUTTON);
a->SetWindowText(_T("Default State"));
因為msdn裡說:
1. CWnd::GetDlgItem
CWnd* GetDlgItem(
int nID
) const;
2. class CButton : public CWnd
3. CWnd::SetWindowText
void SetWindowText(
LPCTSTR lpszString
);
我只看得出來GetDlgItem為CWnd的函數成員,且GetDlgItem回傳值為指標型式
另外,CButton繼承自CWnd,
藉由SetWindowText來設定IDC_BUTTON上的字樣為Default State,
但一直搞不清楚(CButton*)GetDlgItem(IDC_BUTTON)裡的(CButton*)是什麼意思(汗)
我試著改寫成我所能理解的"指向物件的指標"形式:
CButton *a,*b;
b=a->GetDlgItem(IDC_BUTTON);
b->SetWindowText(_T("Default State"));
結果當然是不行XD 在第二行定義b的地方出現錯誤:
IntelliSense: 型別 "CWnd *" 的值無法指派至型別 "CButton *" 的實體
但卻看不懂這個問題.....
想請問各位熱心的板友, 小弟的邏輯出了什麼問題>_<
謝謝!!
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.72.212.97
→ janusliu:CWnd*轉型成CButton*吧 10/08 21:56
→ kwk22:同上, 你的範例前面有加(CButton*)把CWnd*轉成CButton 10/08 23:00
→ srxrrr:謝謝2位的熱心指點! 不過我還是不太了解... 10/08 23:16
→ srxrrr:CButton繼承了CWnd的函數成員 10/08 23:16
→ srxrrr:那為什麼使用CWnd的GetDlgItem還需將*CWnd轉成*CButton呢? 10/08 23:17
→ firose:因為寫的人也不知道為什麼. 呼叫 SetWindowText 根本不用轉 10/08 23:37
→ srxrrr:可是不轉的話不能執行耶@@a 我上面有打出我想的方法 10/08 23:52
→ srxrrr:還是我想錯了? 謝謝! 10/08 23:53
→ Schottky:你弄錯六樓的意思了 10/08 23:56
→ Schottky:把b宣告成CWnd*就不必再轉型,可以直接用SetWindowText() 10/08 23:58
→ damody:深入淺出MFC 這本不錯,雖然mfc有新版不過基本套路相同 10/09 00:56
→ kwk22:瞭解一下繼承的類別,向上跟下轉型這部分 10/09 07:42
推 Ebergies:推因為寫的人也不知道為什麼 XDDDD 10/09 14:45
推 BlazarArc:XDDDD 10/09 15:34
推 plover:XDDDDDDDDDDDD 10/13 00:58