看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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