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':
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;
}
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)调用也行,但换成字母就不行了。一般用一个字符即可。多个字符好像只识别第一个。不过其实一个字符都足够我们实现足够多的功能了。
终于写了一篇原创,高兴,呵呵。