首页 > 代码库 > 转载图片浏览器-MFC+Flash

转载图片浏览器-MFC+Flash

转载自:http://www.cnblogs.com/gameprogram/archive/2011/12/13/2285634.html

import flash.events.Event;import flash.display.MovieClip;import flash.events.MouseEvent;import flash.events.ContextMenuEvent;import flash.display.Loader;import fl.motion.MatrixTransformer;import flash.display.Sprite;import flash.display.Shape;import flash.system.LoaderContext;import flash.display.DisplayObject;import flash.geom.Transform;import flash.geom.Point;import flash.geom.Matrix;/*function fl_ClickToPosition(event:MouseEvent):void{        fscommand("MsgBox", "callC++");}function ChangeButton(msg:String):void{    btn.label = msg;}*/fscommand("fullscreen","true")var isEnd = false;var showImg:Sprite;var ldr :Loader;var pic_width:Number;var pic_height:Number;var img:Bitmap;// for drag movevar canDrag = false;var LBDownX:Number;var LBDownY:Number;// for scalevar scaleW;var scaleH;// for rotatevar isRBDown = false;var rotRadian = 0;var rbX = 0;var rbY = 0;var rotScalar = 0.002;var originX;var originY;// for change imagevar go_limit = 0;var go_left = false;var go_right = false;var size_scalarx = 1;var size_scalary = 1;//stage.stageWidth = 1300;stage.addEventListener(MouseEvent.MOUSE_UP, onm ouseUp);//stage.addEventListener(MouseEvent.MOUSE_MOVE, onRBMove);ExternalInterface.addCallback("MouseWheel",ZoomTo);ExternalInterface.addCallback("RBDown",onRBDown);ExternalInterface.addCallback("RBUp", onRBUp);ExternalInterface.addCallback("RBMove",onRBMove);ExternalInterface.addCallback("RotateX",onMoveRotateX);ExternalInterface.addCallback("InitImage",LoadImage);ExternalInterface.addCallback("ShowMouse",ShowMouse);function ShowMouse():void{    Mouse.show();}var square:Shape = new Shape();this.addChild(square);function drawSqaure(x:Number, y:Number, w:Number, h:Number):void{    square.graphics.clear();    square.graphics.lineStyle(2, 0);    square.graphics.beginFill(200);    //square.rotation = 20;    square.graphics.drawRect(x, y, w, h);    square.graphics.endFill();}stage.addEventListener(Event.RESIZE, DoResize);function DoResize(evt:Event):void{    //fscommand("Resize",""+stage.stageHeight);    go_limit = stage.stageWidth/10;}function Look_Left_Img(evt:Event):void{    trace("left click");    fscommand("Look_Left_Img", "callC++");}function Look_Right_Img(evt:Event):void{    fscommand("Look_Right_Img", "callC++");}//function InitUI():void//{//    button_left.height = stage.stageHeight/5;//    button_right.height = button_left.height;//    button_left.width = stage.stageWidth/21;//    button_left.x = button_left.width/2;//    button_right.x = stage.stageWidth-button_right.width/2;//    button_left.y = stage.stageHeight/2;//    button_right.y = button_left.y;//////    button_left.addEventListener(MouseEvent.CLICK, Look_Left_Img);//    button_right.addEventListener(MouseEvent.CLICK, Look_Right_Img);//}function InitCursor():void{    go_limit = stage.stageWidth/10;    //fscommand("MsgBox",""+stage.stageWidth)    left_cur.visible = false;    right_cur.visible = false;    normal_cur.visible = false;        //left_cur.height = stage.stageHeight/10;//    right_cur.height = left_cur.height;//    left_cur.width = stage.stageWidth/15;//    right_cur.width = left_cur.width;////    normal_cur.height = stage.stageHeight/15;//    normal_cur.width = stage.stageWidth/22;    //    fscommand("MsgBox",""+stage.scaleX);    //    normal_cur.scaleX = 1/stage.scaleX    //normal_cur.scaleY = 1/stage.scaleY            left_cur.scaleX = size_scalarx;    left_cur.scaleY = size_scalary;    normal_cur.scaleX = size_scalarx;    normal_cur.scaleY = size_scalary;    right_cur.scaleX = size_scalarx;    right_cur.scaleY = size_scalary;    trace("scaleX"+normal_cur.scaleX)            //    var cur_size = 16;//    left_cur.height = cur_size;//    left_cur.width = cur_size;//    right_cur.height = cur_size;//    right_cur.width = cur_size;//    normal_cur.height = cur_size;//    normal_cur.width = cur_size;        trace(flash.system.Capabilities.screenResolutionX);        }// load imagefunction LoadImage(filename:String, width:Number, height:Number):void{        //size_scalarx = stage.stageWidth/flash.system.Capabilities.screenResolutionX;    //size_scalary = stage.stageHeight/flash.system.Capabilities.screenResolutionY;    trace("size_scalar:"+size_scalarx)    if (ldr == null)    {        ldr = new Loader();    }    else    {        ldr.unload();    }        ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, ldr_complete);    ldr.load(new URLRequest(filename), new LoaderContext());    pic_width = width;    pic_height = height;            InitCursor();        //InitUI();}LoadImage("E:/1.jpg", 460, 360);function calculatePos(img):void{    trace(stage.stageWidth);    trace(stage.stageHeight);    var m_img_w = stage.stageWidth;    var m_img_h = stage.stageHeight;    var fix_w = m_img_w;    var fix_h = m_img_h;        if (pic_width > pic_height)    {        fix_w = m_img_w;        fix_h = pic_height * m_img_w / pic_width;    }    else    {        fix_w = pic_width * m_img_h / pic_height;        fix_h = m_img_h;    }        trace(fix_w);    img.width = fix_w;    img.height = fix_h;        var wx = m_img_w - fix_w;    var wy = m_img_h - fix_h;        var m_img_x = 0;    var m_img_y = 0;        if (wx > 0)        wx = wx/2;    if (wy > 0)        wy = wy/2;            if( m_img_x > 0 )        m_img_x = 0;    if( m_img_x < wx )        m_img_x = wx;    if(m_img_y > 0)        m_img_y = 0;    if( m_img_y < wy )        m_img_y = wy;                trace(m_img_x);    showImg.x = m_img_x;    showImg.y = m_img_y;}function reset_cursor():void{    trace("cur_X:"+stage.mouseX)    if (stage.mouseX < go_limit)    {        //trace(evt.stageX);        left_cur.visible = true;        normal_cur.visible = false;                go_left = true    }    else if ( stage.mouseX > stage.stageWidth - go_limit)    {        right_cur.visible = true;        normal_cur.visible = false;                go_right = true;    }    else    {        go_left = false;        go_right = false;        left_cur.visible = false;        right_cur.visible = false;        normal_cur.visible = true;        normal_cur.x = stage.mouseX;        normal_cur.y = stage.mouseY;    }        if (go_left)    {        left_cur.x = stage.mouseX;        left_cur.y = stage.mouseY;    }    else if(go_right)    {        right_cur.x = stage.mouseX;        right_cur.y = stage.mouseY;    }}function ldr_complete(evt:Event):void{     var bmp:Bitmap = ldr.content as Bitmap;    //trace(bmp);     scaleW = 0.5 * bmp.width;    scaleH = 0.5 * bmp.height;    img = new Bitmap(bmp.bitmapData);   // img.x = 0;   // img.y = 0;    img.rotation = 0;    //img.width = 300;    //img.height = 100;    if (showImg != null)        this.removeChild(showImg);    showImg = new Sprite();        //img.scaleX = size_scalarx;    //img.scaleY = size_scalary;    calculatePos(img);    showImg.addChild(img);    this.addChild(showImg);    //showImg.rotationY =0;    originX = 0;    originY = 0;        //showImg.addEventListener(MouseEvent.MOUSE_DOWN, onm ouseDown);    showImg.addEventListener(MouseEvent.MOUSE_MOVE, onm ouseMove);    showImg.addEventListener(MouseEvent.MOUSE_UP, onm ouseUp);    showImg.addEventListener(MouseEvent.MOUSE_WHEEL, onm ouseWheel);        //swapChildren(left_cur,showImg);    setChildIndex(normal_cur, 3);    setChildIndex(left_cur, 2);    setChildIndex(right_cur, 1);    setChildIndex(showImg, 0);    //swapChildren(right_cur,showImg);        reset_cursor();}stage.addEventListener(MouseEvent.MOUSE_MOVE, onStageMouseMove)stage.addEventListener(MouseEvent.CLICK, onStageMouseClick)stage.addEventListener(MouseEvent.MOUSE_DOWN, onStageMouseDown)function onStageMouseDown(evt:MouseEvent):void{    if (showImg.hitTestPoint(evt.stageX, evt.stageY))    {        trace("hit");        canDrag = true;        LBDownX = evt.stageX;        LBDownY = evt.stageY;    }}function onStageMouseMove(evt:MouseEvent):void{    Mouse.hide();    if (evt.stageX < go_limit)    {        //trace(evt.stageX);        left_cur.visible = true;        normal_cur.visible = false;        go_left = true        left_cur.x = evt.stageX;        left_cur.y = evt.stageY;    }    else if ( evt.stageX > stage.stageWidth - go_limit)    {        right_cur.visible = true;        normal_cur.visible = false;        go_right = true;        right_cur.x = evt.stageX;        right_cur.y = evt.stageY;    }    else    {        go_left = false;        go_right = false;        left_cur.visible = false;        right_cur.visible = false;        normal_cur.visible = true;        normal_cur.x = evt.stageX;        normal_cur.y = evt.stageY    }        if (canDrag)    {        //trace("move");        var offsetX = evt.stageX - LBDownX;        var offsetY = evt.stageY - LBDownY;                LBDownX = evt.stageX;        LBDownY = evt.stageY;                showImg.x += offsetX;        showImg.y += offsetY;    }    }function onStageMouseClick(evt:MouseEvent):void{    if (go_left)    {        trace("left");        Mouse.hide();        fscommand("Look_Left_Img", "callC++");        //LoadImage("E:/mm.jpg", 850, 1000);    }    else if (go_right)    {        trace("right");                fscommand("Look_Right_Img", "callC++");        Mouse.hide();    }}//function onm ouseDown(evt:MouseEvent):void//{//    trace("mouse down");//    canDrag = true;//    LBDownX = evt.stageX;//    LBDownY = evt.stageY;//}function onm ouseMove(evt:MouseEvent):void{    }function onm ouseUp(evt:MouseEvent):void{    canDrag = false;}function onm ouseWheel(evt:MouseEvent):void{    trace(evt.delta);    ZoomTo(evt.delta*0.2 , evt.delta*0.2);}function IsPosInImage(posX:Number, posY:Number):Boolean{    return img.hitTestPoint(posX,posY);    }function ScaleAroundPoint(objToScale:DisplayObject,regX:Number, regY:Number, scaleX:Number, scaleY:Number):void{    if (!objToScale)    {        return;    }        var transformVector:Point = new Point((regX - objToScale.x)*scaleX, (regY - objToScale.y)*scaleY);        objToScale.x = regX - transformVector.x;    objToScale.y = regY - transformVector.y;    objToScale.scaleX *= scaleX;    objToScale.scaleY *= scaleY;}// scalefunction ZoomTo(scalerH:Number, scalerW:Number):void{    if ((img.height + scaleH * scalerH) > 0 && (img.width + scaleW * scalerW) > 0)    {                if (IsPosInImage(stage.stageWidth/2, stage.stageHeight/2))        {            trace("hit");            //imgMatrix.translate(-stage.width/2, -stage.height/2);            //imgMatrix.tx -=stage.width/2;            //imgMatrix.ty -=stage.height/2;            //imgMatrix.scale(scalerW+1.0, scalerH + 1.0);                        //imgMatrix.tx +=stage.width/2;            //imgMatrix.ty +=stage.height/2;                        //imgMatrix.translate(stage.width/2, stage.height/2);            ScaleAroundPoint(showImg, stage.stageWidth/2, stage.stageHeight/2, scalerW+1.0, scalerH + 1.0);        }        else        {            //imgMatrix.translate(-(transformPoint.x + originX), -(transformPoint.y + originY));//            imgMatrix.scale(scalerW+1.0, scalerH + 1.0);//            imgMatrix.translate(transformPoint.x + originX, transformPoint.y + originY);            ScaleAroundPoint(showImg, showImg.x+showImg.width/2, showImg.y+showImg.height/2, scalerW+1.0, scalerH + 1.0);        }                //showImg.scaleX += scalerW;        //showImg.scaleY += scalerH;                trace((showImg.x+showImg.width/2), (showImg.y+showImg.height/2));                //showImg.transform.matrix = imgMatrix;                //drawSqaure(showImg.x, showImg.y, showImg.width, showImg.height);        //drawSqaure(img.x, img.y, img.width, img.height);    }}// radian to degreefunction RadianToDegree(radian:Number):Number{    return radian * 180/Math.PI;}// get radian after mouseMovefunction RadianAfterMove(mouseX:Number, mouseY:Number):Number{    var flag:Boolean = true;                    //根据鼠标偏移距离来决定旋转角度大小    var diffX:Number = mouseX - rbX;    var diffY:Number = mouseY - rbY;            var distance:Number = Math.sqrt(diffX*diffX+diffY*diffY);            rbX = mouseX;    rbY = mouseY;        if (Math.abs(diffY) >= Math.abs(diffX))    {        if (diffY < 0)            flag = false;    }    else    {        if (diffX < 0)            flag = false;    }                               if (flag)    {            rotRadian += distance * rotScalar;        return distance * rotScalar;    }    else    {        rotRadian -= distance * rotScalar;        return -distance * rotScalar;    }        //return rotRadian;}// right button downfunction onRBDown(posX:Number, posY:Number):void{    isRBDown = true;    rbX = posX;    rbY = posY;    //normal_cur.visible = false;    //size_scalarx = stage.mouseX/rbX;    //size_scalary = stage.mouseY/rbY;}// mouse move when right button down//function onRBMove(evt:MouseEvent):voidfunction onRBMove(posX:Number, posY:Number):void{    if (isRBDown)    {        trace(showImg);        normal_cur.x = normal_cur.x+ (posX - rbX)*size_scalarx;        normal_cur.y = normal_cur.y + (posY - rbY)* size_scalary;        //var imgMatrix:Matrix3D = showImg.transform.matrix3D; ////        var centerX:Number =  img.width / 2; ////        var centerY:Number =  img.height / 2; ////        var centerPoint:Vector3D = new Vector3D(centerX, centerY, 0); ////        var transformPoint:Vector3D = imgMatrix.transformVector(centerPoint);////        imgMatrix.prependTranslation((transformPoint.x + originX), (transformPoint.y + originY), 0);////        imgMatrix.prependRotation(RadianAfterMove(posX, posY)*10, Vector3D.Z_AXIS);////        imgMatrix.prependTranslation(-transformPoint.x + originX, -transformPoint.y + originY, 0);////        showImg.transform.matrix3D = imgMatrix;        var imgMatrix:Matrix = showImg.transform.matrix;                var centerX:Number = img.width/2;        var centerY:Number = img.height/2;                var centerPoint:Point = new Point(centerX, centerY);        var transformPoint:Point = imgMatrix.transformPoint(centerPoint);                imgMatrix.translate(-transformPoint.x, -transformPoint.y);        imgMatrix.rotate(RadianAfterMove(posX, posY))        imgMatrix.translate(transformPoint.x, transformPoint.y);                showImg.transform.matrix = imgMatrix;        //drawSqaure(showImg.x, showImg.y, showImg.width, showImg.height);        //drawSqaure(img.x, img.y, img.width, img.height);    }}// right button upfunction onRBUp():void{    isRBDown = false;    //normal_cur.visible = true;    //normal_cur.x = stage.mouseX;    //normal_cur.y = stage.mouseY;}function onMoveRotateX(posX:Number, posY:Number):void{    showImg.rotationX += RadianAfterMove(posX, posY)*10;}stop();

功能为左键拖动图片,中键缩放图片,右键旋转图片。

这是flash里的代码,生成SWF后,用MFC中的shockwaveflash读入,再截获右键消息,使右键菜单屏蔽。

转载图片浏览器-MFC+Flash