曾经在VCKbase(VC知识库)网站看到过一篇关于Flash的文章,叫做《在VC中使用 Flash 美化你的程序》,文章中介绍的是使用Flash控件在对话框程序中播放Flash文件。由于以前的工作需要曾经接触过使用Scoket通信在VC的Exe程序和Flash程序中通信的相关技术。在这里介绍给大家。相比上面的那篇文章,其有一下有点:
1、 界面上更加优美。所有的界面部分都是直接使用Flash。
2、 所能完成的功能更加完备。几乎所有能在VC的程序中能使用的功能都可以使用。
要做到以上两点所要做的工作也是很简单的,使用的技术也很简单。只要求以下几点:
1、 会使用简单的Flash编辑工具。会写简单的Flash Script脚本。
2、 Socket编程的相关知识。
程序的原理就是:VC程序(对话框程序)在启动以后最小化的任务栏,并建立一个Socket Server进行侦听,在建立完Socket和设置好相关的处理函数以后,启动编译为Exe的Flash程序,Flash程序通过Socket于VC程序建立连接,将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 Socket,type 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];
//获得对话框程序的路径,包含文件名