| | 网站首页 | 范文大全 | 市场营销 | 文案下载 | 猎讯范文 | 猎讯军情 | 网站地图 | 我要留言 | | |
|
||||
| PowerBuilder和MapInfo的集成开发技术 | ||||
|
3.将地图窗口集成到PowerBuilder应用程序中 要将MapInfo的地图窗口集成到PowerBuilder开发的客户程序中,必须在客户程序中为MapInfo中的应用窗口重新指定父窗口,并指定一个Picture控件作为集成的地图窗口的父窗口。可以使用OLE自动化对象的Do方法实现上述功能: //重新指定MapInfo中的应用窗口的父窗口为应用程序窗口 //其中w_map为一个窗口 MapInfo.Application.Do (Set Application Window + String(Handle(w_map))) //指定一个Picture控件棗p_map为地图窗口的父窗口,将地图窗口集成到客户程序中 MapInfo.Do (Set Next Document Parent + string(Handle(p_map)) + Style 1).gif (11237 字节) src=/lunwen/UploadFiles/200505/20050517200008607.gif width=681> 图2 回调技术的实现 4.实现回调 在PowerBuilder的客户程序中,是通过OLE自动化对象对集成的地图窗口进行控制,如图2所示。当客户程序在地图窗口进行有关的操作后(例如使用某个自定义工具在地图窗口上单击某个地图对象时),对应的事件只传递给MapInfo服务器,而不直接传递给客户程序,为了在客户程序中对事件进行处理,必须采用回调技术。由于在PowerBuilder中不能定义公共的回调类,因此必须编写一个在MapInfo服务器中运行的MapBasic应用程序,用来将回调信息反馈给PowerBuilder客户程序。 其实现过程为: 首先,在包含集成地图窗口的PowerBuilder应用窗口创建一个用户自定义事件ue_SelectionMade,事件ID为pbm_Custom01(= 1024)。 然后,编写一个在MapInfo服务器中运行的MapBasic应用程序,在此应用程序中添加对地图窗口事件进行处理的子程序。当对客户程序中的集成地图窗口进行操作时,MapBasic程序中对应的事件处理程序被触发。在事件处理程序中,可以将要传递给客户程序的信息保存到MapBasic中定义的一个全局变量中,然后使用Win32 API函数PostMessage(),以PowerBuilder应用窗口的句柄和该窗口的用户自定义事件的ID为参数,向PowerBuilder客户程序发送消息,这样PowerBuilder客户程序就可以在该窗口的用户自定义事件中处理地图窗口事件了,并且还可以使用MBApplications对象的方法,获取MapBasic全局变量中保存的事件信息。 如下代码展示了MapBasic应用程序在接收到地图对象选择事件时的处理的过程: 预定义PowerBuilder应用窗口的用户自定义事件的唯一数值标识符 DEFINE SELECTION_MADE 1024 响应地图对象选择事件 Sub SelChangedHandler() 如果选中一个地图对象 If CommandInfo(CMD_INFO_SELTYPE) = 1 Then 保存地图对象所在的表的名称 g_seltabname = SelectionInfo(SEL_INFO_TABLENAME) 向PowerBuilder客户程序发送消息 iRc = PostMessage(g_pbhwnd_bg,SELECTION_MADE,0,0) End If End Sub 下面的程序段中给出了实现回调时PowerBuilder客户程序的处理过程。该处理过程使用了MapBasic编写的mbserver.mbx程序。在MapBasic程序中保存事件信息的变量为g_SelTabName,而g_PbHWnd是MapBasic程序中用来接收PowerBuilder客户程序窗口句柄的全局变量。 //在MapInfo服务器 |
||||
|
||||