www.pudn.com > source.rar > FlashNow.cpp
// FlashNow.cpp : Defines the class behaviors for the application.
//
#include "stdafx.h"
#include "FlashNow.h"
#include "SetUpDlg.h"
#include "ViewerFrame.h"
#include "BrowserFrame.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CFlashNowApp
BEGIN_MESSAGE_MAP(CFlashNowApp, CWinApp)
//{{AFX_MSG_MAP(CFlashNowApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
ON_COMMAND(ID_SEND_SUGGESTION, OnSendSuggestion)
ON_COMMAND(ID_TOOL_SETUP, OnToolSetup)
ON_COMMAND(ID_OCX_REGISTER, OnOcxRegister)
ON_COMMAND(ID_HELP_MANUAL, OnHelpManual)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFlashNowApp construction
CFlashNowApp::CFlashNowApp()
{
p_FlashIndex=NULL;
p_Browser=NULL;
p_Viewer=NULL;
TCHAR FileName[_MAX_PATH];
GetModuleFileName(NULL,FileName,_MAX_PATH);
m_ModuleFileName=FileName;
m_ModuleFilePath=GetFilePathFromFileName(m_ModuleFileName);
}
CFlashNowApp::~CFlashNowApp()
{
if(p_FlashIndex)
delete [] p_FlashIndex;
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CFlashNowApp object
CFlashNowApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CFlashNowApp initialization
BOOL CFlashNowApp::InitInstance()
{
CheckFlashOCX();
if(!m_FlashOCX.m_Registered)
return FALSE;
AfxEnableControlContainer();
if(::theApp.m_UserData.m_ShowAbout)
OnAppAbout();
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
TCHAR *cp=m_lpCmdLine;
CString FullPath;
if(!m_UserData.m_RunTimes)
FullPath=m_ModuleFilePath+"sample.swf";
else
FullPath=cmdInfo.m_strFileName;
m_Mode=BROWSER;
if(!FullPath.IsEmpty())
{
if(*cp=='-')
{
cp++;
if(*cp=='b'||*cp=='B')
m_UserData.m_LastPath=FullPath;
}
else
m_Mode=VIEWER;
}
m_Title[0].LoadString(IDR_VIEWER);
m_Title[1].LoadString(IDR_BROWSER);
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
//创建浏览视图
p_Browser=new CBrowserFrame;
m_pMainWnd=p_Browser;
p_Browser->LoadFrame(IDR_BROWSER,WS_OVERLAPPEDWINDOW|FWS_ADDTOTITLE,NULL,NULL);
//创建查看视图
p_Viewer=new CViewerFrame;
m_pMainWnd=p_Viewer;
p_Viewer->LoadFrame(IDR_VIEWER,WS_OVERLAPPEDWINDOW|FWS_ADDTOTITLE,NULL,NULL);
if(!m_Mode)
{
LoadMovie(FullPath);
p_Viewer->ShowWindow(SW_SHOWMAXIMIZED);
p_Viewer->UpdateWindow();
}
else
{
p_Browser->ShowWindow(SW_SHOWMAXIMIZED);
p_Browser->UpdateWindow();
}
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CFlashNowApp message handlers
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CWnd m_Container;
CAboutDlg();
CFlashWnd m_About;
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
BOOL m_ShowAbout;
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
virtual BOOL OnInitDialog();
afx_msg void OnDestroy();
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
m_ShowAbout = ::theApp.m_UserData.m_ShowAbout;
//}}AFX_DATA_INIT
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
ON_WM_DESTROY()
ON_WM_LBUTTONUP()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
DDX_Check(pDX, IDC_SHOW_ABOUT, m_ShowAbout);
//}}AFX_DATA_MAP
}
// App command to run the dialog
void CFlashNowApp::OnAppAbout()
{
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}
/////////////////////////////////////////////////////////////////////////////
// CFlashNowApp message handlers
void CFlashNowApp::LoadMovie(CString URL)
{
AttachFile(URL);
p_Viewer->LoadMovie();
}
//切换至浏览视图
void CFlashNowApp::SwitchToBrowser()
{
//设置窗口大小
p_Viewer->GetWindowPlacement(&m_Placement);
p_Viewer->p_Flash->SetMovie("");
p_Browser->SetWindowPlacement(&m_Placement);
//显示浏览视图,隐藏查看视图
p_Browser->ShowWindow(SW_SHOW);
p_Viewer->ShowWindow(SW_HIDE);
m_pMainWnd=p_Browser;
m_Mode=BROWSER;
p_Browser->OnHilite();
}
void CFlashNowApp::SwitchToViewer()
{
p_Browser->GetWindowPlacement(&m_Placement);
p_Browser->p_Preview->SetMovie("");
p_Viewer->SetWindowPlacement(&m_Placement);
p_Viewer->ShowWindow(SW_SHOW);
p_Browser->ShowWindow(SW_HIDE);
m_pMainWnd=p_Viewer;
m_Mode=VIEWER;
p_Viewer->OnHilite();
}
CUserData::CUserData()
{
m_Elapse=5000;
m_RunTimes=0;
m_Loop=TRUE;
m_URLMode=TRUE;
m_DoubleClick=TRUE;
m_SlideShow=TRUE;
m_ShowAbout=TRUE;
DWORD Size=80;
TCHAR Values[_MAX_PATH];
CRegKey RegKey;
if(RegKey.Open(HKEY_LOCAL_MACHINE,"Software\\BlueJoe\\FlashNow")!=ERROR_SUCCESS)
return;
if(RegKey.QueryValue(Values,"Values",&Size)==ERROR_SUCCESS)
sscanf(Values,"%d %d %d %d %d %d %d",&m_DoubleClick,&m_Loop,&m_URLMode,&m_SlideShow,&m_ShowAbout,&m_Elapse,&m_RunTimes);
Size=_MAX_PATH;
if(RegKey.QueryValue(Values,"LastPath",&Size)==ERROR_SUCCESS)
m_LastPath=Values;
Size=2000;
if(RegKey.QueryValue(m_SavePath,"SavePath",&Size)!=ERROR_SUCCESS)
m_SavePath[0]='\0';
Size=6000;
if(RegKey.QueryValue(m_TypedURLs,"TypedURLs",&Size)!=ERROR_SUCCESS)
m_TypedURLs[0]='\0';
}
CUserData::~CUserData()
{
TCHAR Values[_MAX_PATH];
CRegKey RegKey;
m_RunTimes++;
sprintf(Values,"%d %d %d %d %d %d %d",m_DoubleClick,m_Loop,m_URLMode,m_SlideShow,m_ShowAbout,m_Elapse,m_RunTimes);
RegKey.SetValue(HKEY_LOCAL_MACHINE,
"Software\\BlueJoe\\FlashNow",Values,"Values");
RegKey.SetValue(HKEY_LOCAL_MACHINE,
"Software\\BlueJoe\\FlashNow",m_LastPath,"LastPath");
RegKey.SetValue(HKEY_LOCAL_MACHINE,
"Software\\BlueJoe\\FlashNow",m_SavePath,"SavePath");
RegKey.SetValue(HKEY_LOCAL_MACHINE,
"Software\\BlueJoe\\FlashNow",m_TypedURLs,"TypedURLs");
}
CWnd* CFlashNowApp::GetMainWnd()
{
return m_Mode?(CWnd *)p_Browser:(CWnd *)p_Viewer;
}
void CFlashNowApp::SetWindowTitle(CString Title,BOOL BrowserMode)
{
CWnd *pWnd;
if(BrowserMode)
pWnd=p_Browser;
else
pWnd=p_Viewer;
pWnd->SetWindowText(Title.IsEmpty()?m_Title[m_Mode]:m_Title[m_Mode]+" - "+Title);
}
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CWnd *pWnd=GetDlgItem(IDC_CONTAINER);
m_Container.Attach(pWnd->m_hWnd);
if (m_About.Create(&m_Container)==-1)
return FALSE;
m_About.SetMovie(::theApp.m_ModuleFilePath+"flashnow.swf");
m_About.SetMenu(FALSE);
SetWindowText("FlashNow!");
return TRUE;
}
int CFlashNowApp::ExitInstance()
{
return CWinApp::ExitInstance();
}
int CFlashNowApp::AttachFile(CString FileName)
{
m_MovieURL=FileName;
if(!AttachFolder(GetFilePathFromFileName(FileName)))
{
p_Browser->p_List->m_SelectedItem=-1;
return -1;
}
return p_Browser->p_List->SetSelection(FileName);
}
int CFlashNowApp::AttachFolder(CString Path)
{
if(!p_Browser->p_Tree->SetSelection(Path,TRUE))
return 0;
return p_Browser->p_List->GetItemCount();
}
void CFlashNowApp::OnSendSuggestion()
{
ShellExecute(NULL,"open","mailto:bluejoe@sdb.ac.cn?subject=Suggestion On FlashNow 1.05.20",NULL,NULL,SW_SHOW);
}
CDocument* CFlashNowApp::OpenDocumentFile(LPCTSTR lpszFileName)
{
AttachFile(lpszFileName);
return CWinApp::OpenDocumentFile(lpszFileName);
}
void CAboutDlg::OnDestroy()
{
UpdateData(true);
m_Container.Detach();
::theApp.m_UserData.m_ShowAbout = m_ShowAbout;
CDialog::OnDestroy();
}
CString CFlashNowApp::GetMovieURL()
{
if(m_FlashIndex==-1)
return m_MovieURL;
int Which=p_FlashIndex[m_FlashIndex];
m_MovieURL=p_Browser->p_List->GetItemFullPath(Which);
return m_MovieURL;
}
BOOL CFlashNowApp::IsValidFlashIndex()
{
return(m_FlashIndex>=0&&m_FlashIndexp_List->m_SelectedItem==-1)
return;
if(p_FlashIndex)
delete [] p_FlashIndex;
p_FlashIndex=new int[p_Browser->p_List->GetItemCount()];
m_FlashCount=0;
for(int i=0;ip_List->GetItemCount();i++)
{
if(p_Browser->p_List->IsMovie(i))
{
p_FlashIndex[m_FlashCount++]=i;
}
}
for(i=0;ip_List->m_SelectedItem)
m_FlashIndex=i;
else
break;
}
if(m_FlashIndex<0&&m_FlashCount)
m_FlashIndex=0;
}
void CFlashNowApp::OnToolSetup()
{
CSetupDlg Dlg;
Dlg.DoModal();
}
void CFlashNowApp::OnOcxRegister()
{
CString Warning="此操作将安装SWFlash控件中文版,是否确定?";
if(MessageBox(NULL,Warning,"警告",MB_YESNO|MB_ICONQUESTION)==IDYES)
m_FlashOCX.Register();
}
void CFlashNowApp::CheckFlashOCX()
{
CString Warning;
if(!m_FlashOCX.m_Registered)
{
Warning="你的机器没有安装SWFlash控件,FlashNow! 动画浏览器将不能正确运行。";
}
else
{
if(!m_UserData.m_RunTimes&&!m_FlashOCX.IsChineseVersion())
Warning="FlashNow! 带有SWFlash控件中文版,提供全中文控件菜单界面。";
else
return;
}
Warning+="\n是否现在安装SWFlash控件中文版?";
if(MessageBox(NULL,Warning,"警告",MB_YESNO|MB_ICONQUESTION)==IDYES)
m_FlashOCX.Register();
}
void CAboutDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
OnCancel();
CDialog::OnLButtonUp(nFlags, point);
}
void CFlashNowApp::OnHelpManual()
{
ShellExecute(NULL,"open",theApp.m_ModuleFilePath + "flashnow.chm",NULL,NULL,SW_SHOW);
}