当前位置:K88软件开发文章中心编程全书编程全书15 → 文章内容

Authorware入门教程之开发多媒体课件的经验

减小字体 增大字体 作者:华军  来源:华军资讯  发布时间:2019-2-7 13:58:33

  然而如果单单用Authorware的话,总不能尽如人意的做到这一点。尽管可以用JumpFile、JumpOut等等函数,也可以用库将资源独立出来,但是在考虑总体结构的时候,总是存在一些问题。衔接不够紧密,不能使用公共的模块,几个文件相互通讯困难,而且当框架功能比较复杂时,Authorware便显的能力不足了。  我在用Authorware做了一段框架之后,想到了一个方法可以用VB(其它的应该也可以,只不过VB简单一些而已)来控制我的Authorware程序。我将这个方法用到我的课件中,实践证明是可行的。  这儿我简要的说一下原理,如果您想进一步了解的话请到166.111.26.24/YeyaSrc下载原程序。  原理:  1.在VB程序里可以通过发送键盘或鼠标消息来激活Authorware程序中的交互。比如:在Authorware中定义一个永久的热区交互,同时设置热键为F12,那么,在VB程序中先用SetFocus将输入聚焦定位到Authorware窗口(假设已经知道了Authorware窗口的句柄,如何得到句柄下面进一步讨论),然后用PostMessage(或者SendMessage)给它发送一个F12的KeyDown消息。  2.同样Authorware程序也可以给VB程序发消息,让它响应。(根据我的试验,用MouseDown消息更好一些,可以发送0,0坐标,甚至负值的坐标的MouseDown消息,总之是用户不可能点到的地方,在VB程序的Form_MouseDown事件中再判断一下坐标。)  3.如何传递参数。VB要控制Authorware程序作动作必然要传递一些参数(当然你可以指定F11翻到下一页,但是要翻到第5页怎么办?)。  应用程序之间传递参数可以用DDE,但是这太复杂了。我想到的一个简单的方法是利用dll的全局变量。dll有自己的数据段,我们可以通过引出函数来实现各个程序对dll全局数据的访问。一个简单的例子如下:  int g_iMsg; //定义一个全局变量。  //通过这个函数设置g_iMsg的值。  extern "C" void FAR PASCAL _expert SetMsg(int val)  {  g_iMsg=val  }  //通过这个函数读取g_iMsg的值。  extern "C" int FAR PASCAL _expert GetMsg()  {  return g_iMsg  }  这样两个应用程序便可以通过同一个dll来传递参数-一个用SetMsg()给g_iMsg赋值,另一个用GetMsg()读出这个值。  (对于传递字符串要复杂一些,但应该也是可以的。)  4.有了传递参数的方法之后,那么用VB程序启动Authorware程序之前,先在dll中设置初始化的消息号、VB窗口句柄等等参数;然后当Authorware程序启动,它首先到dll中读出这些参数,(如果消息号不是初始化的消息号,说明不是由VB程序启动)保存VB窗口句柄。然后用2中说的方法给VB发回应消息,同时传递自己的窗口句柄等参数。  5.接下去,有了对方的窗口句柄之后,就可以用1、2中的方法给对方发消息,同时用3的方法传递参数,这样双方便可以响应对方的消息,并根据参数做相应的动作。 

Authorware入门教程之开发多媒体课件的经验