[問題] MFC GetDlgItem的用法

看板C_and_CPP作者 (幹!我是肌董)時間10年前 (2013/10/08 17:25), 編輯推噓3(3012)
留言15則, 9人參與, 最新討論串1/2 (看更多)
開發平台(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

10/08 21:56, , 1F
CWnd*轉型成CButton*吧
10/08 21:56, 1F

10/08 23:00, , 2F
同上, 你的範例前面有加(CButton*)把CWnd*轉成CButton
10/08 23:00, 2F

10/08 23:16, , 3F
謝謝2位的熱心指點! 不過我還是不太了解...
10/08 23:16, 3F

10/08 23:16, , 4F
CButton繼承了CWnd的函數成員
10/08 23:16, 4F

10/08 23:17, , 5F
那為什麼使用CWnd的GetDlgItem還需將*CWnd轉成*CButton呢?
10/08 23:17, 5F

10/08 23:37, , 6F
因為寫的人也不知道為什麼. 呼叫 SetWindowText 根本不用轉
10/08 23:37, 6F

10/08 23:52, , 7F
可是不轉的話不能執行耶@@a 我上面有打出我想的方法
10/08 23:52, 7F

10/08 23:53, , 8F
還是我想錯了? 謝謝!
10/08 23:53, 8F

10/08 23:56, , 9F
你弄錯六樓的意思了
10/08 23:56, 9F

10/08 23:58, , 10F
把b宣告成CWnd*就不必再轉型,可以直接用SetWindowText()
10/08 23:58, 10F

10/09 00:56, , 11F
深入淺出MFC 這本不錯,雖然mfc有新版不過基本套路相同
10/09 00:56, 11F

10/09 07:42, , 12F
瞭解一下繼承的類別,向上跟下轉型這部分
10/09 07:42, 12F

10/09 14:45, , 13F
推因為寫的人也不知道為什麼 XDDDD
10/09 14:45, 13F

10/09 15:34, , 14F
XDDDD
10/09 15:34, 14F

10/13 00:58, , 15F
XDDDDDDDDDDDD
10/13 00:58, 15F
文章代碼(AID): #1IKyzwdn (C_and_CPP)
文章代碼(AID): #1IKyzwdn (C_and_CPP)