// KeyPage.cpp : implementation file // #include "stdafx.h" #include "resource.h" #include "KeyPage.h" #include "MainFrm.h" #include "EffectEditorDoc.h" #include "EffectEditorView.h" #ifdef _DEBUG #undef THIS_FILE static char BASED_CODE THIS_FILE[] = __FILE__; #endif IMPLEMENT_DYNCREATE(CKeyPage, CPropertyPage) IMPLEMENT_DYNCREATE(CScenarioPage, CPropertyPage) ///////////////////////////////////////////////////////////////////////////// // CKeyPage property page CKeyPage::CKeyPage() : CPropertyPage(CKeyPage::IDD) { float fFrameTick; CMainFrame *mf = (CMainFrame*)AfxGetApp()->m_pMainWnd; //{{AFX_DATA_INIT(CKeyPage) m_dwPreFrame = 1; m_dwTotalFrame = 30; m_fFrameSec = 40.0f; m_bLoop = FALSE; m_cBlue = 0; m_cGreen = 0; m_cRed = 0; m_fIncFrame = 1.0f; m_WavName.Empty(); m_pSbuffer = NULL; m_pSmanager = NULL; //}}AFX_DATA_INIT fFrameTick = 1000 / m_fFrameSec; ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->SetFrameTick((unsigned long) fFrameTick); } CKeyPage::~CKeyPage() { } void CKeyPage::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CKeyPage) DDX_Control(pDX, IDC_POINTSLIDER, m_sldPoint); DDX_Control(pDX, IDC_KEYSLIDER, m_sldKeyFrame); DDX_Text(pDX, IDC_PREFRAME, m_dwPreFrame); DDX_Text(pDX, IDC_TOTALFRAME, m_dwTotalFrame); DDX_Text(pDX, IDC_FRAMESEC, m_fFrameSec); DDX_Check(pDX, IDC_LOOP, m_bLoop); DDX_Text(pDX, IDC_BLUE, m_cBlue); DDV_MinMaxByte(pDX, m_cBlue, 0, 255); DDX_Text(pDX, IDC_GREEN, m_cGreen); DDV_MinMaxByte(pDX, m_cGreen, 0, 255); DDX_Text(pDX, IDC_RED, m_cRed); DDV_MinMaxByte(pDX, m_cRed, 0, 255); DDX_Text(pDX, IDC_INCFRAME, m_fIncFrame); DDX_Text(pDX, IDC_WAVNAME, m_WavName); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CKeyPage, CPropertyPage) //{{AFX_MSG_MAP(CKeyPage) ON_WM_HSCROLL() ON_BN_CLICKED(IDC_PLAY, OnPlay) ON_BN_CLICKED(IDC_LOOP, OnLoop) ON_BN_CLICKED(IDC_STOP, OnStop) ON_BN_CLICKED(IDC_WAV, OnWav) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CScenarioPage property page CScenarioPage::CScenarioPage() : CPropertyPage(CScenarioPage::IDD) { //{{AFX_DATA_INIT(CScenarioPage) m_fPrePro = 1.0f; //}}AFX_DATA_INIT } CScenarioPage::~CScenarioPage() { } void CScenarioPage::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CScenarioPage) DDX_Control(pDX, IDC_KEYSLIDER, m_sldKeyFrame); DDX_Text(pDX, IDC_PREPRO, m_fPrePro); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CScenarioPage, CPropertyPage) //{{AFX_MSG_MAP(CScenarioPage) ON_WM_HSCROLL() //}}AFX_MSG_MAP END_MESSAGE_MAP() BOOL CKeyPage::OnInitDialog() { CPropertyPage::OnInitDialog(); // TODO: Add extra initialization here m_sldKeyFrame.SetRange(0, 29); m_sldKeyFrame.SetPos(0); m_sldPoint.Init(0, 29, 30, NULL, MLTSLD_DISPLAY_TOOLTIPS | MLTSLD_INTEGERS); // CSoundManager & smanager = CSoundManager::GetInstance(); // m_pSmanager = &smanager; // m_pSmanager->Create(GetSafeHwnd()); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CKeyPage::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: Add your message handler code here and/or call default if(pScrollBar == (CScrollBar *)&m_sldKeyFrame) { nPos = m_sldKeyFrame.GetPos(); m_sldKeyFrame.SetPos(nPos); m_dwPreFrame = nPos + 1; CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; ((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame = m_dwPreFrame - 1; if(0xFFFFFFFF != ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect) { CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectBase *pEffect = (CX3DEffectBase *)((CX3DEffect *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect)->GetEffect(((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); switch(pEffect->GetEffectKind()) { case EFFECT_PARTICLE: mf->m_EffectBar.m_lpEffectSheet->m_Page1.SetKeyInfo(); break; case EFFECT_BILLBOARD: mf->m_EffectBar.m_lpEffectSheet->m_Page2.SetKeyInfo(); break; case EFFECT_CYLINDER: mf->m_EffectBar.m_lpEffectSheet->m_Page3.SetKeyInfo(); break; case EFFECT_PLANE: mf->m_EffectBar.m_lpEffectSheet->m_Page4.SetKeyInfo(); break; case EFFECT_SPHERE: mf->m_EffectBar.m_lpEffectSheet->m_Page5.SetKeyInfo(); break; case EFFECT_MESH: mf->m_EffectBar.m_lpEffectSheet->m_Page6.SetKeyInfo(); break; } } UpdateData(FALSE); } CPropertyPage::OnHScroll(nSBCode, nPos, pScrollBar); } BOOL CKeyPage::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) { CMainFrame *mf = (CMainFrame*)AfxGetApp()->m_pMainWnd; float fFrameTick; unsigned long temp; UpdateData(); switch(::GetDlgCtrlID(pMsg->hwnd)) { case IDC_TOTALFRAME: ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->SetMaxFrame(m_dwTotalFrame); temp = m_sldKeyFrame.GetPos(); m_sldKeyFrame.SetRange(0, m_dwTotalFrame - 1); m_sldPoint.SetRanges(0, m_dwTotalFrame - 1); if(temp > (m_dwTotalFrame - 1)) { m_sldKeyFrame.SetPos(0); m_dwPreFrame = m_sldKeyFrame.GetPos() + 1; UpdateData(FALSE); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; ((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame = m_dwPreFrame - 1; } UpdateData(FALSE); break; case IDC_FRAMESEC: fFrameTick = 1000 / m_fFrameSec; ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->SetFrameTick((unsigned long) fFrameTick); break; case IDC_INCFRAME: ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->SetIncFrame(m_fIncFrame); break; case IDC_RED: case IDC_GREEN: case IDC_BLUE: ((CEffectEditorView*)mf->GetActiveView())->m_cBackRed = m_cRed; ((CEffectEditorView*)mf->GetActiveView())->m_cBackGreen = m_cGreen; ((CEffectEditorView*)mf->GetActiveView())->m_cBackBlue = m_cBlue; break; } } return CPropertyPage::PreTranslateMessage(pMsg); } void CKeyPage::OnPlay() { // TODO: Add your control notification handler code here CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; ((CEffectEditorView*)mf->GetActiveView())->m_fPlayFrame = 0.0f; ((CEffectEditorView*)mf->GetActiveView())->m_dwOldTick = GetTickCount() - 33; ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->SetFrame(0.0f); ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->SetPlay(TRUE); // ((CEffectEditorView*)mf->GetActiveView())->m_pChr->SetMotion(((CEffectEditorView*)mf->GetActiveView())->m_strMotion); // ((CEffectEditorView*)mf->GetActiveView())->m_pChr->SetMotionSheet(((CEffectEditorView*)mf->GetActiveView())->m_strWeaponSeet); //wav file name input /* if(!m_WavName.IsEmpty()) { CSoundBuffer & sbuffer = m_pSmanager->GetBuffer(m_WavName,false,false); m_pSbuffer = &sbuffer; sbuffer.Play((bool)m_bLoop); }*/ } void CKeyPage::OnLoop() { // TODO: Add your control notification handler code here UpdateData(); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->SetLoop(m_bLoop); } void CKeyPage::OnStop() { // TODO: Add your control notification handler code here CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->SetPlay(FALSE); if(m_pSbuffer) { m_pSbuffer->Destroy(); m_pSbuffer = NULL; } } BOOL CScenarioPage::OnInitDialog() { CPropertyPage::OnInitDialog(); // TODO: Add extra initialization here m_sldKeyFrame.SetRange(0, 99); m_sldKeyFrame.SetPos(0); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CScenarioPage::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: Add your message handler code here and/or call default if(pScrollBar == (CScrollBar *)&m_sldKeyFrame) { nPos = m_sldKeyFrame.GetPos(); m_sldKeyFrame.SetPos(nPos); m_fPrePro = nPos + 1; CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; if(0xFFFFFFFF != ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect) { CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectBase *pEffect = (CX3DEffectBase *)((CX3DEffect *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect)->GetEffect(((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); switch(pEffect->GetEffectKind()) { case 0: mf->m_EffectBar.m_lpEffectSheet->m_Page1.SetKeyInfo(); break; } } UpdateData(FALSE); } CPropertyPage::OnHScroll(nSBCode, nPos, pScrollBar); } void CKeyPage::SetKeyFrame(unsigned long dwFrame) { m_sldKeyFrame.SetPos(dwFrame); m_dwPreFrame = dwFrame + 1; CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; ((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame = m_dwPreFrame - 1; if(0xFFFFFFFF != ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect) { CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectBase *pEffect = (CX3DEffectBase *)((CX3DEffect *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect)->GetEffect(((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); switch(pEffect->GetEffectKind()) { case 0: mf->m_EffectBar.m_lpEffectSheet->m_Page1.SetKeyInfo(); break; case 1: mf->m_EffectBar.m_lpEffectSheet->m_Page2.SetKeyInfo(); break; case 2: mf->m_EffectBar.m_lpEffectSheet->m_Page3.SetKeyInfo(); break; case 3: mf->m_EffectBar.m_lpEffectSheet->m_Page4.SetKeyInfo(); break; case 4: mf->m_EffectBar.m_lpEffectSheet->m_Page5.SetKeyInfo(); break; } } UpdateData(FALSE); } void CKeyPage::SetMaxFrame(unsigned long dwTotalFrame) { m_dwTotalFrame = dwTotalFrame; m_sldPoint.SetRanges(0, m_dwTotalFrame - 1); UpdateData(FALSE); } void CKeyPage::SetMarker(unsigned long dwMarker) { m_sldPoint.SetMaker(dwMarker); } void CKeyPage::ClearMarker() { m_sldPoint.ResetMarkers(); } void CKeyPage::OnWav() { // TODO: Add your control notification handler code here CString strFilter = "Wave Files (*.wav)|*.wav|All Files (*.*)|*.*||"; CFileDialog filedia(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this); filedia.DoModal(); m_WavName=filedia.GetFileName(); UpdateData(false); }