作者aecho (星空下的鮪魚)
看板C_and_CPP
標題Re: [問題] 指標函式一問
時間Mon Aug 10 13:04:28 2009
※ 引述《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