基于QT跨平台的重用MFC消息映射代码的方法、设备及介质技术

技术编号:43588150 阅读:27 留言:0更新日期:2024-12-06 17:52
本发明专利技术涉及一种基于QT跨平台的重用MFC消息映射代码的方法、设备及介质,其中方法包括以下步骤:基于QT定义MFC消息映射相关的数据类型、函数指针类型以及新的事件类型及其类型值;定义消息发送函数,将消息内容封装到新定义的事件类型中,并通过消息发送函数发送到目标;定义事件处理函数,当事件处理函数根据QEvent类型事件的类型值判断并转换新的事件类型,取出事件中的消息ID和消息参数数据,根据目标类的消息映射表查找消息ID的消息映射条目,获得消息响应函数;调用消息响应函数处理消息参数数据,返回处理结果并存到事件中;基于消息发送函数将处理结果返回给调用者;改造MFC中的宏BEGIN_MESSAGE_MAP,使之与QT平台匹配,使得消息映射相关的宏在QT仍能使用;新增宏WM_DECL_WNDMSG、WM_IMPL_WNDMSG,将事件处理相关函数的声明和实现封装到宏代码中,使得事件处理函数的代码模式化。与现有技术相比,本发明专利技术重用既有MFC程序的消息映射相关的代码,减少移植时的代码修改量,提高了工作效率。

【技术实现步骤摘要】

本专利技术涉及列车信号控制系统,尤其是涉及一种基于qt跨平台的重用mfc消息映射代码的方法、设备及介质。


技术介绍

1、基于信创的需求,既有的在用系统如调度集中系统、联锁系统、ats系统、监测系统等要逐步转移到国产软硬件设备上。国产操作系统是基于linux的,这对在windows平台上基于mfc开发的人机界面程序提出了较大的挑战,需要将既有的mfc程序转换成qt程序,移植的工作量是比较大的。特别的,既有mfc程序和移植后qt程序会在工程上同时部署,都将会有相同功能的维护更新需求。

2、mfc和qt的差别是巨大的,既有mfc程序和移植后qt程序在代码方面将会存在巨大的差别。这对于两者的维护更新是很麻烦的。如果既有mfc程序和移植后的qt程序的差别不是特别大,对软件的维护就很有利。

3、消息映射是mfc程序开发的基本方法,以mfc开发程序必然要使用到消息映射。on_message一般用于程序自定义的消息,这些消息通过windows api函数sendmessage向目标窗口发送,窗口过程接收到消息后再进行响应处理。当基于qt开发时,mf本文档来自技高网...

【技术保护点】

1.一种基于QT跨平台的重用MFC消息映射代码的方法,其特征在于,该方法在将MFC程序移植到QT中时,保留MFC程序中与消息映射、消息响应和消息发送相关的代码,减少移植过程中的代码变动,包括以下步骤:

2.根据权利要求1所述的一种基于QT跨平台的重用MFC消息映射代码的方法,其特征在于,所述的事件类型WSMEvent的类型值与其它事件类型的类型值不重复,且按QT开发规则该类型值介于QEvent::User=1000和QEvent::MaxUser=65535之间,采用在QEvent::User的基础上加一个预设的数值来确定,或者调用QT的registerEventType函数...

【技术特征摘要】

1.一种基于qt跨平台的重用mfc消息映射代码的方法,其特征在于,该方法在将mfc程序移植到qt中时,保留mfc程序中与消息映射、消息响应和消息发送相关的代码,减少移植过程中的代码变动,包括以下步骤:

2.根据权利要求1所述的一种基于qt跨平台的重用mfc消息映射代码的方法,其特征在于,所述的事件类型wsmevent的类型值与其它事件类型的类型值不重复,且按qt开发规则该类型值介于qevent::user=1000和qevent::maxuser=65535之间,采用在qevent::user的基础上加一个预设的数值来确定,或者调用qt的registereventtype函数返回一个类型值。

3.根据权利要求1所述的一种基于qt跨平台的重用mfc消息映射代码的方法,其特征在于,所述的事件类型wsmevent中定义有消息id、消息参数wparam和lparam、以及用于存储处理结果的成员变量lresult,其中,所述消息id、wparam、lparam的类型分别为uint、wparam、lparam,lresult的类型为lresult;所述的mfc消息映射相关的数据类型包括但不限于uint、wparam、lparam、lresult。

4.根据权利要求3所述的一种基于qt跨平台的重用mfc消息映射代码的方法,其特征在于,所述的事件处理函数是customevent虚函数,事件处理函数将wsmevent中的消息id、wparam、lparam数据传给消息处理函数,消息处理函数基于消息映射表查找消息响应函数进行消息处理并将消息处理的返回值存储到wsmevent的成员变量lresult中。

5.根据权利要求4所述的一种基于qt跨平台的重用mfc消息映射代码的方法,其特征在于,所述的消息处理函数从最终类的消息映射表开始查找消息响应函数,如果在当前层级的消息映射表中没有找到响应的消息响应函数,则继续在上一层级的消息映射表中查找,直至根层级消息映射表。

6.根据权利要求1所述的一种基于qt跨平台的重用mfc消息映射代码的方法,其特征在于,所述的消息映射表由afx_msgmap结构描述,包括获得上一层次或父类层次消息映射表的函数指针pfngetbasemap和消息映射条目数组;afx_msgmap保留mfc原有的形式和语义,消息映射表afx_msgmap数据由declare_message_map声明,由begin_message_map、end_message_map展开后设置数据。

7.根据权利要求5或6所述的一种基于qt跨平台的重用mfc消息映射代码的方法,其特征在于,所述的消息映射表通过调用函数指针pfngetbasemap获得上一层次的消息映射表,当pfngetbasemap为空指针时表示为根消息映射表,消息映射表afx_msgmap中的pfngetbasemap数据由begin_message_map展开后设置。

8.根据权利要求5或6所述的一种基于qt跨平台的重用mfc消息映射代码的方法,其特征在于,所述的消息处理函数通过afxfindmessageentry函数在消息映射条目数组中进行遍历查找消息响应函数,afxfindmessageentry保留mfc原有的形式和语义。

9.根据权利要求1、5或6所述的一种基于qt跨平台的重用mfc消息映射代码的方法,其特征在于,所述的消息映射条目中包括消息id、消息响应函数及其它必要的数据,由afx_msgmap_entry结构描述,该结构由on_message宏展开后在消息映射表中生成,afx_msgmap_entry、on_message保留...

【专利技术属性】
技术研发人员:王曙光赵翠云张奇峰陈钰胡琰瑜陈宣杨辉张广宇
申请(专利权)人:卡斯柯信号有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1