很多人为了将 Flex 生成的 swf 加到 Flash 生成的 swf 中,为了使其透明,网络中通常的做法是

if(mx_internal::border && mx_internal::border.visible)
{
	mx_internal::border.visible = false;
	mx_internal::border.width = 0;
	mx_internal::border.height = 0;
}
if(systemManager && systemManager.getChildByName("mouseCatcher") && systemManager.getChildByName("mouseCatcher").visible)
{
	systemManager.getChildByName("mouseCatcher").visible = true;
}

设置 mx_internal::border 的作用为使 Flex SWF 透明,
而设置 mouseCatcher 的作用为能使 Flex SWF 背景后的 Flash SWF 能够响应鼠标事件。
但如果单单这么做,问题就会发生了。

mouseCatcher 是 SystemManager 所谓的第0个 child,也就是最下面的那一个,它跟舞台一样大,并且 mouseCatcher.graphics 被 0x000000 所填充,但 alpha 为0,即透明。
SystemManager 是所谓的顶级窗口,它能查看所有并非显示捕获的键盘和鼠标事件,而其中鼠标事件的控制很大一部分要归功于这个 mouseCatcher ,它是为 SystemManager 控制 Flex 内全局 MouseEvent 的一个 Sprite,如果单纯的设置 mouseCatcher 的 visable 为 false,那么 Flex SWF 的 DragManager,TitleWindow 可拖动的等等这些事件将会失效。

全局的鼠标事件可以重新监听 stage,或者在 Flash 的 swf 内新建一个相同的 mouseCatcher 来解决。
而 DragManager 可以为大家提供现成的方法(继承 Application 重写):

//...
systemManager.getSandboxRoot().addEventListener(InterManagerRequest.DRAG_MANAGER_REQUEST, handleDragManagerRequest);
private function handleDragManagerRequest(event:InterManagerRequest):void
{
	var isDragging:Boolean = event.value;
	setMouseCatcher(isDragging);
}
public function setMouseCatcher(value:Boolean):void
{
	systemManager.getChildByName("mouseCatcher").visible = value;
}
//...