Flash与VC的通信方法

基于做智能家居演示程序的需要,必须开发出较好的动画介面。主程序由VC开发通过串口与无线模块通信。动画界面用VC来做是不可取的,于是决定用Flash实现。做成控件的形式嵌入VC,然后通过Flash按钮触发VC的程序,实现相应的功能。
 
这里只说明Flash是如何给VC发消息,和VC是如何捕获消息的。方法比我们想像中简单。
 
1)首先是Flash
    把Flash动画都做好后,选择要触发的事件,如按钮或时间轴上的某个关键帧,然后在Action选项卡上代码区加入一个函数:fscommand(const char *str1,const char *str2);
    参数str1和str2是函数的两个参数均为字符串指针,有点像API消息函数里的WPARAM和LPARAM。调用如下:
    fscommand('1','2');
    这样,事件一但发生(按钮按下或运行到该关键帧),fscommand就会运行,就会向VC发送一个参数为'1'和'2'的消息。剩下的工作就是在VC里捕获此消息。
    运行Ctrl+Enter生成swf文件。
 
2)VC端
    在VC工程文件里选Project -> Add to project -> Conponents and Controls,然后选 Registered ActiveX Controls -> Shockwave Flash Object ,然后Insert即可。然后你会发觉工程里多了一个类CShockwaveFlash。这个类可用来播放Flash文件,但这不是我的重点。这里要做的是捕捉由Flash发送出来的消息:fscommand('1','2');
    在VC工程打开一个对话框资源,在控件栏里加入刚才添加的ShockwaveFlash控件。然后Ctrl+W打开Classwizard。在Class name里选择你要响应Flash消息的类。如CMyView或CMyDlg等。在Object ID里选择IDC_SHOCKWAVEFLASH1,在Message里双击FSCommand,然后Edit Code,添加如下代码:
 
void CFlashToVCDlg::OnFSCommandShockwaveflash1(LPCTSTR command, LPCTSTR args) 
{
     // TODO: Add your control notification handler code here
     UCHAR com,arg;
     com = *command;
     arg = *args;
     switch(com) {
     case '1':
          switch(arg) {
          case '1':
              break;
          case '2':
              MessageBox(_T("12"));
              break;
          default:
              break;
          }
          break;
     case '2':
          break;
     default:
          break;
     }
 
运行结果输出12的MessageBox。具体怎样跑的应该看得出来。
 
功能就这样,是Flash向VC通信的。基于VC向Flash通信,网上说可以在Flash设置一变量,用定时器不断检测变量值。用VC来改变这个值即可。至于具体怎么做有空可以试试。呵呵。
 
还有一点奇怪的是fscommand中参数是字符串,但我用fscommand(1,2)调用也行,但换成字母就不行了。一般用一个字符即可。多个字符好像只识别第一个。不过其实一个字符都足够我们实现足够多的功能了。
 
终于写了一篇原创,高兴,呵呵。

posted @ 2010-04-15 17:15  rob_2010  阅读(1105)  评论(0编辑  收藏  举报