vc之6.0到2008

今天下午突然想到要将原来在6.0上编的程序移植到2003上,开始始终跳出下面两行错误: 1。CJPagerCtrl.cpp(59) : error C2440: 'static_cast' : cannot convert from 'BOOL (__thiscall CCJPagerCtrl::* )(NMPGSCROLL *,LRESULT *)' to 'BOOL (__thiscall CCmdTarget::* )(NMHDR *,LRESULT *)' None of the functions with this name in scope match the target type 2。CJPagerCtrl.cpp(60) : error C2440: 'static_cast' : cannot convert from 'BOOL (__thiscall CCJPagerCtrl::* )(NMPGCALCSIZE *,LRESULT *)' to 'BOOL (__thiscall CCmdTarget::* )(NMHDR *,LRESULT *)' None of the functions with this name in scope match the target type 花了一下午的时间,终于弄明白了,这两个函数是在这个消息宏中发生的错误: ON_NOTIFY_REFLECT_EX(PGN_SCROLL, OnPagerScroll) ON_NOTIFY_REFLECT_EX(PGN_CALCSIZE, OnPagerCalcSize) 消息函数原型: BOOL CCJPagerCtrl::OnPagerCalcSize(NMPGCALCSIZE* pNMPGCalcSize, LRESULT* pResult) BOOL CCJPagerCtrl::OnPagerScroll(NMPGSCROLL* pNMPGScroll, LRESULT* pResult) 主要是在VS2003中,这个消息中,消息函数的参数已经发生了变化,不再是MPGSCROOLL*了,而是NMHDR*了。但是这个改变了之后,函数中的变量的值怎么取得呢,原来NMPGCALCSIZE*是一个结构体指针,该结构体的第一个变量的类型又是NMHDR类型的结构体,因此,将NMHDR指针变量转化为MPGSCROOLL类型的指针就可以了。替换原来消息函数中NMPGCALCSIZE的指针变量。 ON_NOTIFY_REFLECT_EX实际上是一个通知消息反射宏,利用这个宏,可以是窗口控件发给父窗口的通知消息反射回来给控件自己处理。如一个空间想改变自己的颜色,通常是给其父窗口发送消息,有父窗口处理消息改变控件的颜色,但是利用消息反射机制,可以实现控件自己改变自己的颜色。 Map entry Function prototype ON_NOTIFY_REFLECT_EX( wNotifyCode, memberFxn ) afx_msg BOOL memberFxn ( NMHDR * pNotifyStruct, LRESULT* result ); ON_CONTROL_REFLECT_EX( wNotifyCode, memberFxn ) 这是一个表格,前面列是消息宏的定义,后面一列是消息函数的返回值类型和参数。从上面可以看到已经从6.0的NMPGCALCSIZE*或NMPGSCROLL*变为了 NMHDR *了。因此在函数中改过来就可以了。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qsycn/archive/2009/09/25/4592619.aspx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值