书上定义了个函数指针类型typedef void (AFX_MSG_CALL CCmdTarget::*AFX_PMSG)(void);
以及在后面的对函数的赋值
(AFX_PMSG)(AFX_PMSGW)(int (AFX_MSG_CALL CWnd::*)(LPCREATESTRUCT))OnCreate);
(AFX_PMSG)(AFX_PMSGW)(int (AFX_MSG_CALL CWnd::*)(int,int))OnMove);
那么长大家能帮我分析下是怎么回事吗?
定义的指针类型跟下面两个的参数和返回值都不匹配,怎么没问题呢?
以及在后面的对函数的赋值
(AFX_PMSG)(AFX_PMSGW)(int (AFX_MSG_CALL CWnd::*)(LPCREATESTRUCT))OnCreate);
(AFX_PMSG)(AFX_PMSGW)(int (AFX_MSG_CALL CWnd::*)(int,int))OnMove);
那么长大家能帮我分析下是怎么回事吗?
定义的指针类型跟下面两个的参数和返回值都不匹配,怎么没问题呢?
一种指向CCmdTarget成员函数的指针类型 2、(AFX_PMSG)(void (AFX_MSG_CALL CCmdTarget::*)(UINT))
把1的成员函数指针强制转化为AFX_PMSG函数指针类型,AFX_PMSG是一个macro(是什么的成员函数指针忘了) 3、(AFX_PMSG)(void (AFX_MSG_CALL CCmdTarget::*)(UINT))&memberfxn
得到成员函数memberfxn的函数地址,并依次做上面的转换。
此时cwnd尚未定义,只能用别的类来充数。
用什么都可以,rect都行。