VC6.0编写层析软件移植到VS2003心得
2009-09-25 08:57
531 查看
今天下午突然想到要将原来在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实际上是一个通知消息反射宏,利用这个宏,可以是窗口控件发给父窗口的通知消息反射回来给控件自己处理。如一个空间想改变自己的颜色,通常是给其父窗口发送消息,有父窗口处理消息改变控件的颜色,但是利用消息反射机制,可以实现控件自己改变自己的颜色。
转自:http://wangrenf.blog.163.com/blog/static/17612237200711169466972/
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 *了。因此在函数中改过来就可以了。 |
相关文章推荐
- 记录Sqlserver2012附加Sqlserver2008的数据库出错的解决方案一、摘要 最近在实验里面用台式编写好了一个软件,想移植到家里的笔记本上。在附加数据的时候却出现了错误,具体也没有提示
- 简单截图软件的编写——心得总结
- 用j2me编写palm软件的一点心得(一)
- ntfs下数据恢复软件编写心得
- 编写图形软件的一点心得
- VC6.0编写的MFC项目移植到VS2010中编译遇到的几个问题
- 解决安装vs2003以及vc6.0 visual stdio6.0等微软软件需要重启的问题
- 用j2me编写palm软件的一点心得(一)
- 软件测试总结报告的编写
- 移植wpa_supplicant软件与DHCP软件解密WPA/WPA2 加密的无线网络
- 软件工程心得体会(五)
- 用VC6.0编写Word插件(Office2K、XP、03)
- 软件心得
- Unicode与国际化软件开发学习心得
- 我的航拍直升机 控制基站软件的编写历程(三)——开始读QMK-GroundStation的代码
- 我的航拍直升机 控制基站软件的编写历程(3.1)—qwt的安装与配置
- 如何编写易于移植的C++ 程序
- 软件代码规范笔记_代码编写
- 我的航拍直升机 控制基站软件的编写历程(三)——开始读QMK-GroundStation的代码
- 编写小攻击软件