// PageDuengunContainer.cpp : implementation file // #include "stdafx.h" #include "worldcreator.h" #include "PageDuengunContainer.h" #include "SceneManager.h" #include "worldcreatorView.h" #include "mainfrm.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPageDuengunContainer property page IMPLEMENT_DYNCREATE(CPageDuengunContainer, CPropertyPage) CPageDuengunContainer::CPageDuengunContainer() : CPropertyPage(CPageDuengunContainer::IDD) { //{{AFX_DATA_INIT(CPageDuengunContainer) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_pEditName = NULL; m_pDuengunTriggerDlg = NULL; } CPageDuengunContainer::~CPageDuengunContainer() { delete m_pEditName; m_pEditName = NULL; } void CPageDuengunContainer::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPageDuengunContainer) DDX_Control(pDX, IDC_TREE1, m_ctrlDuengunTree); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPageDuengunContainer, CPropertyPage) //{{AFX_MSG_MAP(CPageDuengunContainer) ON_NOTIFY(NM_RCLICK, IDC_TREE1, OnRclickTree1) ON_COMMAND(ID_MENUITEM_DUNGUENINSERT, OnMenu_DunguenInsert) ON_COMMAND(ID_MENUITEM_DUENGUNDELETE, OnMenu_DuengunDelete) ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, OnSelchangedTree1) ON_NOTIFY(NM_DBLCLK, IDC_TREE1, OnDblclkTree1) ON_MESSAGE(WM_CHILD_CLOSE, OnChildClose) ON_NOTIFY(TVN_BEGINDRAG, IDC_TREE1, OnBegindragTree1) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPageDuengunContainer message handlers void CPageDuengunContainer::OnRclickTree1(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here CPoint point; GetCursorPos(&point); CMenu menu; menu.LoadMenu(IDR_MENU_DUENGUN); menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this); *pResult = 0; } void CPageDuengunContainer::OnMenu_DunguenInsert() { // TODO: Add your command handler code here m_pEditName = new CDlgEditName; m_pEditName->DoModal(); // Bsp À̸§ÀÌ ÀԷµÇÁö ¾Ê¾Ò´Ù¸é.. if( m_pEditName->m_EditName.GetLength() < 2) return; float fScale = m_pEditName->m_fScale; TV_INSERTSTRUCT tvInsert; tvInsert.hParent = m_Root; tvInsert.hInsertAfter = TVI_LAST; tvInsert.item.mask = TVIF_TEXT; tvInsert.item.state = 0; tvInsert.item.stateMask = 0; tvInsert.item.cchTextMax = 50; tvInsert.item.iSelectedImage = 1; tvInsert.item.cChildren = 0; tvInsert.item.pszText = m_pEditName->m_EditName.LockBuffer(); tvInsert.item.iImage = 1; char *pChr = strrchr(tvInsert.item.pszText,'.'); pChr++; pChr++; pChr++; //pChr == 'e' || pChr == 'p' if((*pChr) == 'p' || (*pChr) == 'P') CSceneManager::m_RBspSceneManager.InsertBspScene(tvInsert.item.pszText,fScale); else { CSceneManager::m_RBspSceneManager.InsertBseScene(tvInsert.item.pszText,fScale); RBspScene *pScene = CSceneManager::m_RBspSceneManager.SearchBspScene(tvInsert.item.pszText); pScene->m_bVisible = true; vector3 vecPos = vector3(pScene->m_vecZeroPos.x, pScene->m_vecZeroPos.y, pScene->m_vecZeroPos.z); matrix *ViewPos=CSceneManager::GetCamera()->GetMatPosition(); ViewPos->_41=vecPos.x; ViewPos->_42=vecPos.y; ViewPos->_43=vecPos.z; CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView(); av->m_SceneManager->UpdateScene(0.0f); } m_ctrlDuengunTree.Expand(m_ctrlDuengunTree.InsertItem(&tvInsert),TVE_EXPAND); m_ctrlDuengunTree.Expand(m_Root,TVE_EXPAND); delete m_pEditName; m_pEditName = NULL; } void CPageDuengunContainer::OnMenu_DuengunDelete() { TVITEM tvitem; char szStr[50]; memset(szStr,0,sizeof(char) * 50); tvitem.hItem = m_ctrlDuengunTree.GetSelectedItem(); tvitem.mask = TVIF_TEXT; tvitem.pszText = szStr; tvitem.cchTextMax = 50; m_ctrlDuengunTree.GetItem(&tvitem ); if(strcmp(tvitem.pszText,"Root")) { CSceneManager::m_RBspSceneManager.DeleteBspScene(tvitem.pszText); m_ctrlDuengunTree.DeleteItem(m_ctrlDuengunTree.GetSelectedItem()); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView(); av->Invalidate(TRUE); } else { MessageBox("Root Node´Â Áö¿ï¼ö ¾ø½À´Ï´Ù."); } // TODO: Add your command handler code here } /* BOOL CPageDuengunContainer::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) { // TODO: Add your specialized code here and/or call the base class return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext); } */ BOOL CPageDuengunContainer::OnInitDialog() { CPropertyPage::OnInitDialog(); m_imgIcon.Create(IDB_TREEICON,16,2,RGB(0,128,128)); m_ctrlDuengunTree.SetImageList(&m_imgIcon,TVSIL_NORMAL); TV_INSERTSTRUCT tvInsert; tvInsert.hParent = NULL; tvInsert.hInsertAfter = TVI_LAST; tvInsert.item.mask = TVIF_TEXT; tvInsert.item.state = 0; tvInsert.item.stateMask = 0; tvInsert.item.cchTextMax = 50; tvInsert.item.iSelectedImage = 1; tvInsert.item.cChildren = 0; tvInsert.item.pszText = "Root"; tvInsert.item.iImage = 0; m_Root = m_ctrlDuengunTree.InsertItem(&tvInsert); m_ctrlDuengunTree.Expand(m_Root,TVE_EXPAND); // TODO: Add extra initialization here m_pDuengunTriggerDlg = new CDlgDuengunTrigger; m_pDuengunTriggerDlg->Create(this); m_pDuengunTriggerDlg->ShowWindow(SW_HIDE); m_pDuengunTriggerDlg->SetWindowPos( NULL, 0, 500, 0, 0, SWP_NOSIZE | SWP_NOZORDER ); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CPageDuengunContainer::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; // TODO: Add your control notification handler code here HTREEITEM hItem = pNMTreeView->itemNew.hItem; *pResult = 0; } void CPageDuengunContainer::OnDblclkTree1(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here BeginDuengunTrigger(); *pResult = 0; } void CPageDuengunContainer::BeginDuengunTrigger() { TVITEM tvitem; char szStr[50]; memset(szStr,0,sizeof(char) * 50); tvitem.hItem = m_ctrlDuengunTree.GetSelectedItem(); tvitem.mask = TVIF_TEXT; tvitem.pszText = szStr; tvitem.cchTextMax = 50; m_ctrlDuengunTree.GetItem(&tvitem ); if(strcmp(tvitem.pszText,"Root")) { CSceneManager::m_RBspSceneManager.SetPickIndex(tvitem.pszText); m_pDuengunTriggerDlg->SetBspFile(tvitem.pszText); m_pDuengunTriggerDlg->ShowWindow(SW_SHOW); m_ctrlDuengunTree.EnableWindow(FALSE); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView(); av->Invalidate(TRUE); } else // Root Node Select { MessageBox("Root Node ÀÔ´Ï´Ù.(¼±ÅÃÇÏ½Ç ¼ö ¾ø½À´Ï´Ù.)"); } } LRESULT CPageDuengunContainer::OnChildClose(WPARAM wParam, LPARAM lParam) { /*if( (CDlgEditGCMDS*)wParam == m_pDlgEditGCMDS ) { EndGCMDSEdit(); } */ m_pDuengunTriggerDlg->ShowWindow(SW_HIDE); m_ctrlDuengunTree.EnableWindow(TRUE); CSceneManager::m_RBspSceneManager.SetPickIndex(""); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView(); av->Invalidate(TRUE); return 0; } void CPageDuengunContainer::OnBegindragTree1(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; // TODO: Add your control notification handler code here CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView(); av->m_bSelectBsp = true; av->ChangeMouseInterface(95); TVITEM tvitem; char szStr[50]; memset(szStr,0,sizeof(char) * 50); tvitem.hItem = m_ctrlDuengunTree.GetSelectedItem(); tvitem.mask = TVIF_TEXT; tvitem.pszText = szStr; tvitem.cchTextMax = 50; m_ctrlDuengunTree.GetItem(&tvitem ); // Select µÈ bsp À̸§ av->m_strSelectBspScene.Format("%s",tvitem.pszText); //// *pResult = 0; }