看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
LPH66:啊我突然想到了 去回呼收事件的視窗的成員函式XD 08/10 13:08
LPH66:以你此例來說 因為必然會有個CMyClass的實體 08/10 13:09
LPH66:然後會登記在系統中 (不然系統找不到人做事) 08/10 13:09
LPH66:所以事件發生時就去呼叫該收這個事件的視窗的成員函式 08/10 13:10
LPH66:而且它一定不能是靜態 (因為你可以相同類別的視窗開好多個) 08/10 13:11
LPH66:呼叫時用 obj.*fp(...) (差點忘了有 .* 和 ->* 這兩個東西) 08/10 13:12
LPH66:或如果是指標的話 pobj->*fp(...) 08/10 13:13