作者EdisonX (閉上眼的魚)
看板C_and_CPP
標題[問題] Dialog 包 class, CALLBACK Proc 處理
時間Thu Jul 26 22:15:57 2012
開發平台(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