看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC2010 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) Win32 API 問題敘述: 算是 Design Pattern 經驗不夠。我要做的事很簡單,用 class 包含以下動作 DialogBox CALLBACK DlgProc EndBox 卡在設定 CALLBACK DlgProc 那裡死很慘 錯誤結果(Wrong Output): 'UintDlgWnd::UintDlgProc': 函式呼叫遺漏引數清單,請用 '&UintDlgWnd::UintDlgProc' 建立成員的指標 程式碼(Code):(請善用置底文網頁, 記得排版) class UintDlgWnd{ private: BOOL CALLBACK UintDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam); public: int CreateDlg(UINT ResID); }; int UintDlgWnd::CreateDlg( UINT ResID ) { return DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(ResID), NULL, this->UintDlgProc); } BOOL CALLBACK UintDlgWnd::UintDlgProc( HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam ) { /* do somethihg */ } 補充說明(Supplement): 想過的替代方案有兩個 (1) friend CALLBACK DlgProc < 這大概不能真的解決吧 > (2) class 裡不寫 DlgProc, 以 *DlgProc 做函式指標, 真正的 DlgProc 直接寫到外面, class member 直接指到外面去。 其他進階問題: (1) 一開始想過先做一個 Base VirDlgClass , 在 DlgProc 那裡用純虛擬函式, 不過還是卡死, 這種設計應較佳? (2) 不知道有沒有書專門講視窗程式設計怎麼包 class ? (這是最想知道的) Win32 聖經是翻完二、三遍, 不過每次要刻的時候就讓人懷念 C++ class 的特性。 是沒有要開發完整的 windows class 體系出來,講概念、相關的一些 DP 就行。 一個小 sample 動不動就要用 MFC 或安裝其他 library 感覺就沒很好, 深入淺出那本只講概述原理(是很深入沒錯啦);Open Source 又太大; 用 C 刻整個變數命名很亂,真的是..一言難盡。 謝謝各位先進不吝指教,小弟感激不盡。 -- 「自從我學了 C# , 人都變聰明 , 考試都考一百分」 「自從我學了 VB , 皮膚都變好 , 人也變漂亮了 」 「自從我學了 Java , 明顯變壯 , 個子也變高了 」 「自從我學了 C++ , 內分泌失調 , 頭都禿了... 」 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.76.161
james732:我猜要把 UintDlgProc 改成 static ? 07/26 22:45
EdisonX:!! 可以了!! 謝謝 james 大. 07/26 22:54
damody:改static 後就可以在裡面加funtion的map之類的 07/29 10:50
damody:可以達到多實體 分別註冊的效果 順便多執行緒一起執行 07/29 10:51
EdisonX:疑!damody 可以說細一些嗎 ? 有點模糊。 07/29 14:55