使用Flash彻底美化你的应用程序

使用Flash彻底美化你的应用程序 -- VC++界面设计 

 

[转]http://softlife.blog.sohu.com/20257070.html

曾经在VCKbaseVC知识库)网站看到过一篇关于Flash的文章,叫做《在VC中使用 Flash 美化你的程序》,文章中介绍的是使用Flash控件在对话框程序中播放Flash文件。由于以前的工作需要曾经接触过使用Scoket通信在VCExe程序和Flash程序中通信的相关技术。在这里介绍给大家。相比上面的那篇文章,其有一下有点:

1、 界面上更加优美。所有的界面部分都是直接使用Flash

2、 所能完成的功能更加完备。几乎所有能在VC的程序中能使用的功能都可以使用。

要做到以上两点所要做的工作也是很简单的,使用的技术也很简单。只要求以下几点:

1、 会使用简单的Flash编辑工具。会写简单的Flash Script脚本。

2、  Socket编程的相关知识。

程序的原理就是:VC程序(对话框程序)在启动以后最小化的任务栏,并建立一个Socket Server进行侦听,在建立完Socket和设置好相关的处理函数以后,启动编译为ExeFlash程序,Flash程序通过SocketVC程序建立连接,将Flash界面上的操作转换为Socket通信,让VC程序处理完成以后将结果返回给Flash程序。其简单的步骤为:

1、 VC程序端(或者其他任何编程语言的程序):建立一个对话框程序,在APP类的InitInstance()函数中添加Scoket初始化:

if (!AfxSocketInit())

       {

              AfxMessageBox(IDP_SOCKETS_INIT_FAILED);

              return FALSE;

}

2、  在对话框类的OnInitDialog()函数中添加处理界面部分的程序段:

MoveWindow(0,0,0,0);  //将对话框程序界面改变为0

ShowWindow(SW_SHOWMINIMIZED);   //使界面最小化到任务栏

OnOK(); //调用对话框的OnOK函数

3、 在对话框类的OnOK()函数中建立Socket server并侦听:

WSADATA wsaData;

    int iErrorCode;

    if (WSAStartup(MAKEWORD(2,1),&wsaData)) //Windows Sockets DLL

       {

               AfxMessageBox("Winsock can not initialize.",MB_ICONSTOP);

         WSACleanup();

               SendMessage(WM_CLOSE,NULL,NULL);//关闭对话框程序

         return;

       }

       //Create server Sockettype is SOCK_STREAM

       ServerSocket = socket(PF_INET,SOCK_STREAM,0);  

    if(ServerSocket == INVALID_SOCKET)

       {

              AfxMessageBox("Could not create server Socket.",MB_ICONSTOP);

              SendMessage(WM_CLOSE,NULL,NULL); //关闭对话框程序

         return;

       }

m_sockServerAddr.sin_family = AF_INET;

//IP设置为广播

    m_sockServerAddr.sin_addr.s_addr = inet_addr("127.0.0.1");

       //使用9813端口,自己编程的时候可以随意选择,最好使用5000以后的

    m_sockServerAddr.sin_port = htons(9813);

//绑定Socket

    if (bind(ServerSocket,(LPSOCKADDR)&m_sockServerAddr,sizeof(m_sockServerAddr)) == SOCKET_ERROR) //

    {

              AfxMessageBox("Could not bind Server socket.",MB_ICONSTOP);

              SendMessage(WM_CLOSE,NULL,NULL); //关闭对话框程序

        return;

       }

    iErrorCode = WSAAsyncSelect(ServerSocket,m_hWnd,WM_CLIENT_ACCEPT,FD_ACCEPT);

    if (iErrorCode == SOCKET_ERROR)

       {

              AfxMessageBox("Could not select socket.",MB_ICONSTOP);

           SendMessage(WM_CLOSE,NULL,NULL); //关闭对话框程序

         return;

       }

    if (listen(ServerSocket,1) == SOCKET_ERROR) //begin listen client

       {

              AfxMessageBox("Could not listen.",MB_ICONSTOP);

              SendMessage(WM_CLOSE,NULL,NULL);

        return;

       }

       //启动Flash程序

       CString FlashExePath;

       char DialogExePath[256];

   //获得对话框程序的路径,包含文件名

       ::GetModuleFileName(0, DialogExePath, sizeof(DialogExePath));

       FlashExePath = DialogExePath;

   //去除对话框程序文件名,获得所在目录路径

       int Len = FlashExePath.ReverseFind('\\');

       FlashExePath = FlashExePath.Left(Len);

       // Sample.exe为编译好的Flash程序,存放在和VC程序同一目录下

       FlashExePath  += "\\Sample.exe";

WinExec(FlashExePath,1);

     

       return;

}

相关变量定义在对话框类的头文件中,作为成员变量:

SOCKET Client;        //客户的连接请求

       SOCKET ServerSocket;             //SOCKET

       SOCKADDR_IN m_sockServerAddr;  //SOCKET结构

4.在对话框程序中添加Socket的处理函数:

头文件中添加:

#define WM_CLIENT_ACCEPT WM_USER+101

#define WM_CLIENT_READCLOSE WM_USER+102

LRESULT OnAccept(WPARAM wParam, LPARAM lParam);

LRESULT OnReadClose(WPARAM wParam,LPARAM lParam);

CPP文件中添加消息映射宏和相关函数的实现:

      ON_MESSAGE(WM_CLIENT_ACCEPT,OnAccept)

       ON_MESSAGE(WM_CLIENT_READCLOSE,OnReadClose)

LRESULT CSetupDlg::OnAccept(WPARAM wParam,LPARAM lParam)

{

//出错返回

       if (WSAGETSELECTERROR(lParam))

       {

              return0L;

       }

     

       if(WSAGETSELECTEVENT(lParam) == FD_ACCEPT)

       {

           Client = accept(ServerSocket,(LPSOCKADDR)&m_sockServerAddr,0);

           if (Client == INVALID_SOCKET)

              {

                     AfxMessageBox("INVALID_SOCKET.",MB_ICONSTOP);

                     return0L;

              }

              WSAAsyncSelect(Client,m_hWnd,WM_CLIENT_READCLOSE,FD_READ|FD_CLOSE);

       }

     

       return0L;

}

///

LRESULT CSetupDlg::OnReadClose(WPARAM wParam,LPARAM lParam)

{  

//在这里接收从Flash发送来的数据包,并解析它们,根据包中的数据不同通过Swith执行相//关的操作,可以调用其他的函数,需要将执行的结果返回(发送)给Flash

       CString str;

       switch (WSAGETSELECTEVENT(lParam))

       {

       //这里的msgmsg中的相关定义都是自定义的结构体

       case FD_READ:

              if(recv(Client,(char *)&msg,sizeof(msg),0) == SOCKET_ERROR)

              {

                     return 0;

              }

              str.Format("%s",msg.msg);

              list.InsertString(0,str);

              {     

                     PSockmsg recmsg=(PSockmsg)msg.msg;

                     str=recmsg->msg;

                     switch(recmsg->action)

                     {

                            case 'D':

                                   break;         

                            case 'W':

                                   break;

                            default:

                     }

              }

              break;

       case FD_CLOSE:

              str = _T("client close.");

              closesocket(Client);//关闭Socket

              SendMessage(WM_CLOSE,NULL,NULL);//发送消息结束程序

              break;

       }

       return0L;

}

这段函数我就不多解释了,注意在OnOK中的WSAAsyncSelect调用确定了当收到发生Socket事件的时候发出WM_CLIENT_ACCEPT消息。第二个消息处理函数中用到了一些自定义的结构体,这是在和Flash统一以后确定的一些结构体,用于在FlashVC程序之间传递消息参数的,这也是其重要的部分,需要根据实际的情况确定。

2Flash:需要进行Socket连接,并组织并发送相关的Socket包,接收VC端返回的结果。参考代码:

///

function onsock(success) {

        if (success) {

            _root.gotoAndPlay(2);

        } else {

            _root.gSock.connect("127.0.0.1", 9813);//连接VC程序

         }

    }

    function onsockclose() {

        fscommand ("quit");

    }

    stop();

    fscommand ("fullscreen", false);

    fscommand ("allowscale", false);

    fscommand ("showmenu", false);

    Stage.showMenu = false;

    var gSock = new XMLSocket ();//new一个Socket对象

    var installed = false;

    var usethreeside = false;

    var havewireless = false;

    var finished = false;

    var osys = true;

    var mem = true;

    var processor = true;

    var harddisk = true;

    var network = true;

    gSock.onClose = onsockclose;//指定Socket的相关回调函数

    _root.gSock.connect("127.0.0.1", 9813);//调用自定义的函数

_root.gSock.onConnect = onsock;

///

//接收并判断相关的在VC程序段执行的结果。

function onrecv(XMLDoc) {

        var _local2;

        _local2 = XMLDoc.toString();

        if (_local2 == "failed") {

            _root.osys = false;

        }

        _root.gotoAndPlay(196);

    }

    _root.stop();

    _root.gSock.onXML = onrecv;

    var local1;

    local1 = "Wcheckos";//相关的信息组织

    _root.gSock.send(local1);//发送数据

这种应用一般使用在安装程序上的比较多,通过Socket通信在VC程序端调用相关的函数执行一些在Flash中很难执行的操作,比如检测硬件,写系统注册表,Copy文件,调用第三方的程序等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值