怎么把ShockWaveFlash控件上发生的鼠标右键捕获,并替换成鼠标左键事件

本文介绍了如何在MFC应用程序中使用ShockWaveFlash控件,并实现了通过预处理鼠标消息来改变左右键行为的方法。此外,还展示了如何利用callfunction进行跨语言调用,包括VB、C++和C#示例及其对应的Flash端ActionScript代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

forest_wawa (大坏蛋007)
http://search.youkuaiyun.com/expert/topic/50/5003/2003/2/16/1432958.htm
描述:我在程序里面使用ShockWaveFlash的控件,我需要实现的功能是∶
1) 在FLAHS动画的一个按钮上面压下鼠标左键后,执行flash的左键消息响应函数OnFsCommand();
2) 在这个按钮上压下鼠标右键后还是要执行OnFsCommand(),并且还需要弹出一个popup菜单
回复人: masterz()
BOOL CuseflashDlg::PreTranslateMessage(MSG* pMsg)
{
// change right button message to left button message by masterz
POINT pt;
pt.x = LOWORD(pMsg->lParam);
pt.y= HIWORD(pMsg->lParam);
CString msg;
CRect rc;
m_flash.GetWindowRect(&rc);
ScreenToClient(&rc);
msg.Format("mouse (%d,%d),flash (%d,%d,%d,%d)",pt.x,pt.y,rc.left,rc.top,rc.right,rc.bottom);
if(pMsg->message==WM_RBUTTONDOWN||pMsg->message==WM_RBUTTONUP||pMsg->message==WM_RBUTTONDBLCLK)
OutputDebugString(msg);
if(rc.PtInRect(pt)||::GetFocus()==m_flash.m_hWnd||pMsg->hwnd==m_flash.m_hWnd)
//if(::GetFocus()==m_flash.m_hWnd)
{
if(pMsg->message==WM_RBUTTONDOWN)
pMsg->message=WM_LBUTTONDOWN;
if(WM_RBUTTONUP==pMsg->message)
pMsg->message = WM_LBUTTONUP;
if(WM_RBUTTONDBLCLK==pMsg->message)
pMsg->message=WM_LBUTTONDBLCLK; if(pMsg->message==WM_RBUTTONDOWN||pMsg->message==WM_RBUTTONUP||pMsg->message==WM_RBUTTONDBLCLK)
OutputDebugString("point in rect");
}
return CDialog::PreTranslateMessage(pMsg);
}
回复人: masterz()
m_flash.LoadMovie(0,"C://Downloads//icons.swf");
m_flash.Play();
版主点评:
MFC中消息替换功能一般都要在PreTranslateMessage函数中实现。

 

 

 

flash8.ocx中对象的callfunction怎样运用,注意swf文件要用flash8.0版本制作,flash控件要flash8.ocx版本
VB描述(传多个参数)
VB端
Private Sub Command1_Click()
       Flash1.CallFunction "<invoke name=""show""  returntype=""xml""><arguments><string>hello</string><string>world</string></arguments></invoke>"    '篇幅关系,与上面同行
End Sub
Private Sub Form_Load()
    ShockwaveFlash1.LoadMovie 0, App.Path & "/showstring.swf"
End Sub
flash端
①添加一个文本框text_txt以显示效果
②ActionScript代码为
function show(str1:String,str2:String):Void{
      test_txt.text=str1+" : "+str2;
}
flash.external.ExternalInterface.addCallback("show",this,show);
C++或C#描述(只传一个参数,用)

主程序端:
flash1.LoadMovie(0,Application.StartPath+"
/showstring.swf");
flash1.CallFunction("<invoke name=/"test/" returntype=/"xml/"><arguments><string>Helloworld</string></arguments></invoke>");
flash端:
①添加一个文本框text_txt以显示效果或用trace("call: "+result+"")
②ActionScript代码为,其中result只是参数,而主程序端使用AS的函数时不需要关心参数名,只有知道有参数个数,或参数位置
function test(result:Object):Void{
   test_txt.text=result;
}
flash.external.ExternalInterface.addCallback("test", this, test);

要设置动画播放的特定选项,请执行以下操作,完成后关闭“属性”对话框: 确保 Playing 属性设为 True。该设置使幻灯片显示时自动播放动画文件。如果 Flash 文件内置有“开始/倒带”控件,则 Playing 属性可设为 False。 如果不想让动画反复播放,请在 Loop 属性中选择 False(单击单元格以显示向下的箭头,然后单击该箭头选择 False)。 要嵌入 Flash 文件以便将该演示文稿传递给其他人,请在 EmbedMovie 属性中单击 True。(但是,要运行 Flash 文件,任何运行该演示文稿的计算机都必须注册 Shockwave Flash Object 控件。) 要运行动画:在幻灯片的普通视图下,单击 PowerPoint 窗口左下方的“幻灯片放映”按钮(或按 F5 键,或在“幻灯片放映”菜单上单击“观看放映”)。 要退出幻灯片放映返回普通视图,请按 ESC 键。 shockwave flash object 控件 2007-05-16 13:11 1.shockwave flash object功能 虽然从5.0版本开始Authorware就直接支持播放Flash动画(那将Flash动画嵌入Authorware应用程序的内部), 但这种支持是有限的,在Flash动画中所包含的某些功能会失效,且当所嵌入的Flash动画比较大时,会严重影响程 序的运行速度。使用shockwave flash object 控件可以使在Authorware中加入的Flash动画保持原有的功能,但 注意此时又失去了嵌入Authorware程序内部时所能灵活设置的层数、透明的特点。因此在具体选用何种方式时要注 意根据具体情况来选择。 2.shockwave flash object的常用属性 "Loop"--是否循环播放。默认为TRUE。 "Movie"--设置要播放的动画文件名。 "Playing"--播放状态。 "Quality"--设置播放时的显示质量。可设为0~3中的一个,其对应的是0--Low(不使用抗锯齿功能以低质量播放动 画)、1--High(使用抗锯齿功能以产生高质量的着色效果,但会降低播放速度)、2--AutoLow(先不用抗锯齿功 能,但当检测到当前计算机的处理能力可以胜任抗锯齿功能时,就自动打开抗锯齿功能)、3--AutoHigh(首先使用 抗锯齿功能,但若动画播放速度达不到指定速率时就自动关闭抗锯齿功能)。默认值为1。 "ScaleMode"--设置动画的缩放模式。可设置0~2中的一个,其对应的是0--ShowAll(在缩放时保持Flash动画的 比例)、1--noBorder(在缩放时保持Flash动画的比例,必要时可进行裁剪)、2--ExactFit(不考虑Flash动画的 原始比例)。默认值为0。 3.shockwave flash object的常用方法 "Back"--向后播放。 "Forward"--向前播放。 "CurrentFrame"--获得正在播放的当前帧。 "GotoFrame"--跳到指定帧。带一个参数,是指定的帧数。 "IsPlaying"--检测是否在播放。 "Play"--播放动画。 "Rewind"--将动画反绕回第一帧。 "Stop"--停止动画的播放。 "Zoom"--缩放动画。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值