书上定义了个函数指针类型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);
那么长大家能帮我分析下是怎么回事吗?
定义的指针类型跟下面两个的参数和返回值都不匹配,怎么没问题呢?

解决方案 »

  1.   

    前面(AFX_PMSG)(AFX_PMSGW)做了强制转换。
      

  2.   

    1、void   (AFX_MSG_CALL   CCmdTarget::*)(UINT) 
    一种指向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的函数地址,并依次做上面的转换。
      

  3.   

    CCmdTarget
    此时cwnd尚未定义,只能用别的类来充数。
    用什么都可以,rect都行。
      

  4.   

    AFX_PMSG被定义为函数指针类型。OnCreate和OnMove是用上面的类型定义的两个指针变量。