Re: [問題] 指標函式一問

看板C_and_CPP (C/C++)作者 (星空下的鮪魚)時間16年前 (2009/08/10 13:04), 編輯推噓1(106)
留言7則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《ireullin (raison detre)》之銘言: : 請問一下各位前輩 : MFC中有許多的訊息事件都是使用 ON_BN_CLICKED 這樣的define 來將函式與與訊息綁在 : 一起 : 可是這些事件傳進去的成員函式都是非靜態的 : 請問這是怎摸做的呢 : 指標函式不是都要傳靜態的進去嘛 : 如果我也要自訂一些像這樣的事件 : 等到需要的時候去呼叫這些非靜態的函式 : 請問我要怎摸做呢 我發現,我也不懂,呵呵… message那邊的宣告是 如 .h 裡的 class CMyClass : public CWnd { ... protected: afx_msg void OnBtnOneClicked(); afx_msg void OnBtnTwoClicked(); afx_msg void OnBtnThreeClicked(); DECLARE_MESSAGE_MAP() } .cpp裡的 BEGIN_MESSAGE_MAP(CMyClass, CWnd) ON_BN_CLICKED(ID_BTN_ONE, &CMyClass::OnBtnOneClicked) ON_BN_CLICKED(ID_BTN_TWO,&CMyClass::OnBtnTwoClicked) ON_BN_CLICKED(ID_BTN_THREE, &CMyClass::OnBtnThreeClicked) END_MESSAGE_MAP() void CMyClass::OnBtnOneClicked() { ... } void CMyClass::OnBtnTwoClicked() { ... } void CMyClass::OnBtnThreeClicked() { ... } 其中,One, Two, Three那三個OnBtnxxxClicked()的function, 都不是static的宣告,但是在message map裡, 卻是用 &CMyClass::OnBtnxxxClicked()來指向該function。 所以? -- 不先商議,所謀無效; 謀士眾多,所謀乃成。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.59.242

08/10 13:08, , 1F
啊我突然想到了 去回呼收事件的視窗的成員函式XD
08/10 13:08, 1F

08/10 13:09, , 2F
以你此例來說 因為必然會有個CMyClass的實體
08/10 13:09, 2F

08/10 13:09, , 3F
然後會登記在系統中 (不然系統找不到人做事)
08/10 13:09, 3F

08/10 13:10, , 4F
所以事件發生時就去呼叫該收這個事件的視窗的成員函式
08/10 13:10, 4F

08/10 13:11, , 5F
而且它一定不能是靜態 (因為你可以相同類別的視窗開好多個)
08/10 13:11, 5F

08/10 13:12, , 6F
呼叫時用 obj.*fp(...) (差點忘了有 .* 和 ->* 這兩個東西)
08/10 13:12, 6F

08/10 13:13, , 7F
或如果是指標的話 pobj->*fp(...)
08/10 13:13, 7F
文章代碼(AID): #1AVwfVSU (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1AVwfVSU (C_and_CPP)