• MFC+Flash图片浏览器


    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_Number;
    var pic_height:Number;


    var img:Bitmap;

    // for drag move
    var canDrag = false;
    var LBDownX:Number;
    var LBDownY:Number;

    // for scale
    var scaleW;
    var scaleH;

    // for rotate
    var isRBDown = false;
    var rotRadian = 0;
    var rbX = 0;
    var rbY = 0;
    var rotScalar = 0.002;
    var originX;
    var originY;

    // for change image
    var 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, onMouseUp);
    //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 image
    function LoadImage(filename:String, 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, onMouseDown);
    showImg.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
    showImg.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
    showImg.addEventListener(MouseEvent.MOUSE_WHEEL, onMouseWheel);

    //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 onMouseDown(evt:MouseEvent):void
    //
    {
    //
    trace("mouse down");
    //
    canDrag = true;
    //
    LBDownX = evt.stageX;
    //
    LBDownY = evt.stageY;
    //
    }

    function onMouseMove(evt:MouseEvent):void
    {

    }

    function onMouseUp(evt:MouseEvent):void
    {
    canDrag = false;
    }

    function onMouseWheel(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;
    }

    // scale
    function 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 degree
    function RadianToDegree(radian:Number):Number
    {
    return radian * 180/Math.PI;
    }

    // get radian after mouseMove
    function 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 down
    function 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):void
    function 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 up
    function 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读入,再截获右键消息,使右键菜单屏蔽。

  • 相关阅读:
    第02组 Alpha冲刺(2/6)
    第02组 Alpha冲刺(1/6)
    第02组 团队Git现场编程实战
    第02组 团队项目-需求分析报告
    团队项目-选题报告
    第二次结对编程作业
    第一次结对编程作业
    第2组 团队展示(组长)
    Exchange 2013 中的 OAB (脱机通讯簿)以及如何管理
    vmware esxi 查看网卡、Raid卡驱动
  • 原文地址:https://www.cnblogs.com/gameprogram/p/2285634.html
Copyright © 2020-2023  润新知