使用Flash彻底美化你的程序vc++技术
曾经在 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];
// 获得对话框程序的路径,包含文件名
转自:http://hereson.javaeye.com/blog/200694