VC中利用FLASH制作图声并茂的动画程序
2010-06-29 20:41:24 来源:WEB开发网接下来的问题便是如何在VB中完成执行后触发这个事件。由于在vb中使用API很复杂,为了提供简单起见我用vc做了share.dll实现setvalue,然后在VB中进行调用来激活事件。在setvalue中调用如下两个函数来激活事件。
OpenEvent(DWORD dwAccess,//存取方式
BOOL bInheritHandle,//是否能被继承
LPCTSTR lpName)//名字
SetEvent (HANDLE hEvent);
Vb中用变量锁方法实现在未出来提示“点我呀!”前对左键点击的无效,在显示完提示后,当用户点击就调用setvalue来激活事件。
Agent1_Click(ByVal CharacterID As String, ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Integer, ByVal y As Integer)
If b ==ture
Then setvalue
Endif
(4)FLASH的播放,并实现避免右键菜单的弹出
1. 控键注册: HMODULE hmod=LoadLibrary ("swflash.ocx");
FARPROC p=GetProcAddress (hmod,"DllRegisterServer");
(*p)();
2.在工程中插入 flash 控件。由于在不规则窗口中在进行flash控件的支持会使程序过于不清晰。于是另开独立的窗口来显示flash。void TransparentWnd::OnTimer(UINT nIDEvent)
{
switch (nIDEvent)
{
case 1:
{
KillTimer (nIDEvent);
DoChange(MAKEINTRESOURCE(IDB_MAIN2));
//创建视,作为默认视
if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
CRect(260, 30,630, 370), this, AFX_IDW_PANE_FIRST, NULL))
TRACE0("Failed to create view window\n");
CenterWindow ();
ShowWindow (SW_SHOW);
}
break;
default: break;
}
}
BOOL TransparentWnd::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
if(m_wndView.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
return TRUE;//如果是command消息则视类先处理。
return CWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
void TransparentWnd::OnSetFocus(CWnd* pOldWnd)
{
//如果有视类则视类获得焦点。
if(m_wndView.m_hWnd !=NULL)
m_wndView.SetFocus();
}
下面在CchildView中定义
CShockwaveFlash myflash;
///改变窗口特征
BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs)
{
if (!CWnd::PreCreateWindow(cs))
return FALSE;
cs.dwExStyle |= WS_EX_CLIENTEDGE;
cs.style &= ~WS_BORDER;
cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,
::LoadCursor(NULL, IDC_ARROW), HBRUSH(COLOR_WINDOWTEXT), NULL);
return TRUE;
}
BOOL CChildView::OnEraseBkgnd(CDC* pDC)
{
return TRUE;//不让window自动刷屏
}
//下面进入控制部分
int CChildView ::OnCreate (LPCREATESTRUCT lpCreateStruct)
{
if(CWnd::OnCreate(lpCreateStruct)==-1)
return -1;
myflash.Create(NULL,WS_CHILD|WS_VISIBLE,CRect(0,0,0,0), this, 1024);
SetTimer (1,0,NULL);
SetTimer (2,12000,NULL);
CRect m_rect;
GetClientRect (&m_rect );
myflash.MoveWindow (&m_rect);//使flash 控件占满整个视区域
return 0;
}
char *a = new char [512];
GetCurrentDirectory (100,a);
CString *s=new CString(a);
myflash.LoadMovie (0,*s+CString("\\zf.swf"));//这里一定要为全路径
myflash.Play();//播放FLASH动画
(5)两个高级话题
更多精彩
赞助商链接