1.一種基于qt跨平臺的重用mfc消息映射代碼的方法,其特征在于,該方法在將mfc程序移植到qt中時,保留mfc程序中與消息映射、消息響應和消息發(fā)送相關的代碼,減少移植過程中的代碼變動,包括以下步驟:
2.根據(jù)權利要求1所述的一種基于qt跨平臺的重用mfc消息映射代碼的方法,其特征在于,所述的事件類型wsmevent的類型值與其它事件類型的類型值不重復,且按qt開發(fā)規(guī)則該類型值介于qevent::user=1000和qevent::maxuser=65535之間,采用在qevent::user的基礎上加一個預設的數(shù)值來確定,或者調用qt的registereventtype函數(shù)返回一個類型值。
3.根據(jù)權利要求1所述的一種基于qt跨平臺的重用mfc消息映射代碼的方法,其特征在于,所述的事件類型wsmevent中定義有消息id、消息參數(shù)wparam和lparam、以及用于存儲處理結果的成員變量lresult,其中,所述消息id、wparam、lparam的類型分別為uint、wparam、lparam,lresult的類型為lresult;所述的mfc消息映射相關的數(shù)據(jù)類型包括但不限于uint、wparam、lparam、lresult。
4.根據(jù)權利要求3所述的一種基于qt跨平臺的重用mfc消息映射代碼的方法,其特征在于,所述的事件處理函數(shù)是customevent虛函數(shù),事件處理函數(shù)將wsmevent中的消息id、wparam、lparam數(shù)據(jù)傳給消息處理函數(shù),消息處理函數(shù)基于消息映射表查找消息響應函數(shù)進行消息處理并將消息處理的返回值存儲到wsmevent的成員變量lresult中。
5.根據(jù)權利要求4所述的一種基于qt跨平臺的重用mfc消息映射代碼的方法,其特征在于,所述的消息處理函數(shù)從最終類的消息映射表開始查找消息響應函數(shù),如果在當前層級的消息映射表中沒有找到響應的消息響應函數(shù),則繼續(xù)在上一層級的消息映射表中查找,直至根層級消息映射表。
6.根據(jù)權利要求1所述的一種基于qt跨平臺的重用mfc消息映射代碼的方法,其特征在于,所述的消息映射表由afx_msgmap結構描述,包括獲得上一層次或父類層次消息映射表的函數(shù)指針pfngetbasemap和消息映射條目數(shù)組;afx_msgmap保留mfc原有的形式和語義,消息映射表afx_msgmap數(shù)據(jù)由declare_message_map聲明,由begin_message_map、end_message_map展開后設置數(shù)據(jù)。
7.根據(jù)權利要求5或6所述的一種基于qt跨平臺的重用mfc消息映射代碼的方法,其特征在于,所述的消息映射表通過調用函數(shù)指針pfngetbasemap獲得上一層次的消息映射表,當pfngetbasemap為空指針時表示為根消息映射表,消息映射表afx_msgmap中的pfngetbasemap數(shù)據(jù)由begin_message_map展開后設置。
8.根據(jù)權利要求5或6所述的一種基于qt跨平臺的重用mfc消息映射代碼的方法,其特征在于,所述的消息處理函數(shù)通過afxfindmessageentry函數(shù)在消息映射條目數(shù)組中進行遍歷查找消息響應函數(shù),afxfindmessageentry保留mfc原有的形式和語義。
9.根據(jù)權利要求1、5或6所述的一種基于qt跨平臺的重用mfc消息映射代碼的方法,其特征在于,所述的消息映射條目中包括消息id、消息響應函數(shù)及其它必要的數(shù)據(jù),由afx_msgmap_entry結構描述,該結構由on_message宏展開后在消息映射表中生成,afx_msgmap_entry、on_message保留mfc原有的形式和語義。
10.根據(jù)權利要求1所述的一種基于qt跨平臺的重用mfc消息映射代碼的方法,其特征在于,所述的調用消息響應函數(shù)具體為在消息處理函數(shù)查找到消息映射條目時,對消息映射條目中的響應函數(shù)指針進行類函數(shù)調用,并且將獲得的消息參數(shù)wparam、lparam數(shù)據(jù)作為響應函數(shù)調用的參數(shù)。
11.根據(jù)權利要求1所述的一種基于qt跨平臺的重用mfc消息映射代碼的方法,其特征在于,所述的改造mfc中的宏begin_message_map是對mfc中的宏定義作適當修改使得消息映射相關的宏與qt平臺匹配,具體為:begin_message_map的第二個參數(shù)是第一個參數(shù)的基類,當?shù)诙€參數(shù)是qt中的類時則將第二個參數(shù)改為與第一個參數(shù)相同,否則,保持其第二個參數(shù)和mfc程序中的參數(shù)一致。
12.根據(jù)權利要求11所述的一種基于qt跨平臺的重用mfc消息映射代碼的方法,其特征在于,所述的改造mfc中的宏begin_message_map,通過第二個參數(shù)與第一個參數(shù)是否相同來設置消息映射表afx_msgmap中的pfngetbasemap數(shù)據(jù),當兩個參數(shù)相同時pfngetbasemap置為空函數(shù)指針,否則pfngetbasemap指向第二個參數(shù)所聲明的類的消息映射表的獲取函數(shù),即父類或上一層次消息映射表的獲取函數(shù)的指針。
13.根據(jù)權利要求1所述的一種基于qt跨平臺的重用mfc消息映射代碼的方法,其特征在于,所述的新增宏wm_decl_wndmsg用于展開事件處理函數(shù)的聲明,新增宏wm_impl_wndmsg用于展開事件處理函數(shù)的實現(xiàn)。
14.根據(jù)權利要求1所述的一種基于qt跨平臺的重用mfc消息映射代碼的方法,其特征在于,所述的end_message_map、declare_message_map、on_message宏保留原有的mfc形式和語義。
15.根據(jù)權利要求1所述的一種基于qt跨平臺的重用mfc消息映射代碼的方法,其特征在于,所述的事件處理函數(shù)的代碼模式化是指方法在進行應用時,使用已定義的消息映射相關宏來實現(xiàn)消息機制,達到重用mfc消息映射代碼的目的;在應用已定義的消息映射相關宏時,根據(jù)應用的目標類類型進行不同處理,所述目標類類型包括消息映射最基類和消息映射繼承類,所述的消息映射最基類是指具備消息映射機制或功能的最開始的類,此類之上的所有基類都不具備消息映射機制或功能;所述的消息映射繼承類是指此類之上的某個直接基類或間接基類具備了消息映射機制或功能,此類也因此而具備消息映射機制或功能的類,消息映射繼承類泛指消息映射最基類的所有繼承類;判定一個類為消息映射最基類的方法是,此類的直接基類是qt中的類,且在mfc原程序中此類的直接基類是mfc中的類。
16.根據(jù)權利要求15所述的一種基于qt跨平臺的重用mfc消息映射代碼的方法,其特征在于,所述方法應用到消息映射繼承類時,移植既有mfc程序的頭文件和cpp文件,與消息映射相關代碼保持mfc程序原樣;方法應用到消息映射最基類時,移植既有mfc程序的頭文件,在類定義中增加wm_decl_wndmsg宏應用;移植既有mfc程序的cpp文件,增加wm_impl_wndmsg宏應用,并且修改begin_message_map的第二個參數(shù)使其與第一個參數(shù)相同。
17.一種電子設備,包括存儲器和處理器,所述存儲器上存儲有計算機程序,其特征在于,所述處理器執(zhí)行所述程序時實現(xiàn)如權利要求1~16中任一項所述的方法。
18.一種計算機可讀存儲介質,其上存儲有計算機程序,其特征在于,所述程序被處理器執(zhí)行時實現(xiàn)如權利要求1~16中任一項所述的方法。