[問題] Dialog 包 class, CALLBACK Proc 處理

看板C_and_CPP (C/C++)作者 (閉上眼的魚)時間13年前 (2012/07/26 22:16), 編輯推噓1(104)
留言5則, 3人參與, 最新討論串1/2 (看更多)
開發平台(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

07/26 22:45, , 1F
我猜要把 UintDlgProc 改成 static ?
07/26 22:45, 1F

07/26 22:54, , 2F
!! 可以了!! 謝謝 james 大.
07/26 22:54, 2F

07/29 10:50, , 3F
改static 後就可以在裡面加funtion的map之類的
07/29 10:50, 3F

07/29 10:51, , 4F
可以達到多實體 分別註冊的效果 順便多執行緒一起執行
07/29 10:51, 4F

07/29 14:55, , 5F
疑!damody 可以說細一些嗎 ? 有點模糊。
07/29 14:55, 5F
文章代碼(AID): #1G4L4Xzf (C_and_CPP)
文章代碼(AID): #1G4L4Xzf (C_and_CPP)