D:/Zythum/DinoKod/Viewer/childfrm.cpp

00001 // ChildFrm.cpp : implémentation de la classe CChildFrame
00002 //
00003 #include "stdafx.h"
00004 #include "Viewer.h"
00005 
00006 #include "ChildFrm.h"
00007 #include "LeftView.h"
00008 #include "TreeAnimView.h"
00009 #include "BottomView.h"
00010 #include "ViewerDoc.h"
00011 #include "ViewerView.h"
00012 
00013 #ifdef _DEBUG
00014 #define new DEBUG_NEW
00015 #endif
00016 
00017 
00018 // CChildFrame
00019 
00020 IMPLEMENT_DYNCREATE(CChildFrame, CMDIChildWnd)
00021 
00022 BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
00023 //      ON_UPDATE_COMMAND_UI_RANGE(AFX_ID_VIEW_MINIMUM, AFX_ID_VIEW_MAXIMUM, OnUpdateViewStyles)
00024 //      ON_COMMAND_RANGE(AFX_ID_VIEW_MINIMUM, AFX_ID_VIEW_MAXIMUM, OnViewStyle)
00025 ON_WM_CREATE()
00026 ON_WM_DESTROY()
00027 ON_COMMAND(ID_DISPLAY_SHOWSELECTION, OnDisplayShowselection)
00028 ON_WM_SIZE()
00029 ON_WM_SIZING()
00030 END_MESSAGE_MAP()
00031 
00032 
00033 // construction ou destruction de CChildFrame
00034 
00035 CChildFrame::CChildFrame()
00036 {
00037         m_pGameViewer           = NULL;
00038         m_pDocument                     = NULL;
00039         m_bAutoMenuEnable       = FALSE;
00040 }
00041 
00042 CChildFrame::~CChildFrame()
00043 {
00044         if( m_pGameViewer )
00045                 Deletep( m_pGameViewer );
00046 }
00047 
00048 BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext)
00049 {
00050         m_pDocument = (CViewerDoc*)pContext->m_pCurrentDoc;
00051 
00052         // Splitter vertical au centre
00053         if (!m_wndSplitter.CreateStatic(this, 1, 2))
00054                 return FALSE;
00055 
00056         // Splitter horizontal a gauche
00057         if (!m_wndSplitter2.CreateStatic( &m_wndSplitter, 2, 1, WS_CHILD | WS_VISIBLE, m_wndSplitter.IdFromRowCol(0, 0)))
00058                 return FALSE;
00059 
00060         if (!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(0, 100), pContext) ||
00061                 !m_wndSplitter2.CreateView(1, 0, RUNTIME_CLASS(CTreeAnimView), CSize(100, 0), pContext))
00062         {
00063                 m_wndSplitter.DestroyWindow();
00064                 m_wndSplitter2.DestroyWindow();
00065                 return FALSE;
00066         }
00067 
00068         // Splitter horizontal a droite
00069         if (!m_wndSplitter3.CreateStatic( &m_wndSplitter, 2, 1, /*WS_DISABLED | */WS_CHILD | WS_VISIBLE, m_wndSplitter.IdFromRowCol(0, 1)))
00070                 return FALSE;
00071 
00072         if (!m_wndSplitter3.CreateView(0, 0, RUNTIME_CLASS(CViewerView), CSize(100, 250), pContext) ||
00073                 !m_wndSplitter3.CreateView(1, 0, RUNTIME_CLASS(CBottomView), CSize(100, 150), pContext))
00074         {
00075                 m_wndSplitter.DestroyWindow();
00076                 m_wndSplitter2.DestroyWindow();
00077                 m_wndSplitter3.DestroyWindow();
00078                 return FALSE;
00079         }
00080 
00081         CRect Rect;
00082         GetWindowRect( &Rect );
00083 
00084         m_wndSplitter.SetColumnInfo( 0, 200, 10 );
00085         m_wndSplitter2.SetRowInfo( 0, 300, 10 );
00086         m_wndSplitter3.SetRowInfo( 0, 250, 100 );
00087         m_wndSplitter3.SetRowInfo( 1, 150, 100 );
00088 
00089         // Menu
00090         m_Menu.LoadMenu( IDR_MENU_CHILD );
00091         SetHandles( m_Menu.GetSafeHmenu(), NULL );
00092         DrawMenuBar();
00093 
00094         CMenu*  pMenu = m_Menu.GetSubMenu( 2 );
00095         pMenu->CheckMenuItem( ID_DISPLAY_SHOWSELECTION, MF_BYCOMMAND | MF_UNCHECKED );
00096 
00097         return TRUE;
00098 }
00099 
00100 BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
00101 {
00102         // TODO : Changez ici la classe ou les styles Window en modifiant CREATESTRUCT cs
00103         if( !CMDIChildWnd::PreCreateWindow(cs) )
00104                 return FALSE;
00105 
00106         return TRUE;
00107 }
00108 
00109 
00110 // diagnostics pour CChildFrame
00111 
00112 #ifdef _DEBUG
00113 void CChildFrame::AssertValid() const
00114 {
00115         CMDIChildWnd::AssertValid();
00116 }
00117 
00118 void CChildFrame::Dump(CDumpContext& dc) const
00119 {
00120         CMDIChildWnd::Dump(dc);
00121 }
00122 
00123 #endif //_DEBUG
00124 
00125 
00126 // gestionnaires de messages pour CChildFrame
00127 /*CTestMDIView* CChildFrame::GetRightPane()
00128 {
00129         CWnd* pWnd = m_wndSplitter.GetPane(0, 1);
00130         CTestMDIView* pView = DYNAMIC_DOWNCAST(CTestMDIView, pWnd);
00131         return pView;
00132 }
00133 *//*
00134 void CChildFrame::OnUpdateViewStyles(CCmdUI* pCmdUI)
00135 {
00136         // TODO : personnalisez ou étendez ce code en vue de la gestion des options dans le menu Affichage.
00137         CTestMDIView* pView = GetRightPane(); 
00138 
00139         // si le volet de droite n'a pas été créé ou n'est pas une vue, désactiver les commandes dans notre étendue
00140         if (pView == NULL)
00141                 pCmdUI->Enable(FALSE);
00142         else
00143         {
00144                 DWORD dwStyle = pView->GetStyle() & LVS_TYPEMASK;
00145                 // si la commande est ID_VIEW_LINEUP, activer la commande
00146                 // uniquement en mode LVS_ICON ou LVS_SMALLICON
00147                 if (pCmdUI->m_nID == ID_VIEW_LINEUP)
00148                 {
00149                         if (dwStyle == LVS_ICON || dwStyle == LVS_SMALLICON)
00150                                 pCmdUI->Enable();
00151                         else
00152                                 pCmdUI->Enable(FALSE);
00153                 }
00154                 else
00155                 {
00156                         // sinon, utiliser des pointillés pour refléter le style de la vue
00157                         pCmdUI->Enable();
00158                         BOOL bChecked = FALSE;
00159 
00160                         switch (pCmdUI->m_nID)
00161                         {
00162                         case ID_VIEW_DETAILS:
00163                                 bChecked = (dwStyle == LVS_REPORT);
00164                                 break;
00165 
00166                         case ID_VIEW_SMALLICON:
00167                                 bChecked = (dwStyle == LVS_SMALLICON);
00168                                 break;
00169 
00170                         case ID_VIEW_LARGEICON:
00171                                 bChecked = (dwStyle == LVS_ICON);
00172                                 break;
00173 
00174                         case ID_VIEW_LIST:
00175                                 bChecked = (dwStyle == LVS_LIST);
00176                                 break;
00177 
00178                         default:
00179                                 bChecked = FALSE;
00180                                 break;
00181                         }
00182 
00183                         pCmdUI->SetRadio(bChecked ? 1 : 0);
00184                 }
00185         }
00186 }
00187 *//*
00188 void CChildFrame::OnViewStyle(UINT nCommandID)
00189 {
00190         // TODO : personnalisez ou étendez ce code en vue de la gestion des options dans le menu Affichage.
00191         CTestMDIView* pView = GetRightPane();
00192 
00193         // si le volet de droite a été créé et qu'il s'agit d'une vue CTestMDIView, les commandes de menu sont exécutées...
00194         if (pView != NULL)
00195         {
00196                 int nStyle = -1;
00197 
00198                 switch (nCommandID)
00199                 {
00200                 case ID_VIEW_LINEUP:
00201                         {
00202                                 // demander au contrôle List de s'aligner sur la grille
00203                                 CListCtrl& refListCtrl = pView->GetListCtrl();
00204                                 refListCtrl.Arrange(LVA_SNAPTOGRID);
00205                         }
00206                         break;
00207 
00208                 // d'autres commandes changent le style du contrôle List
00209                 case ID_VIEW_DETAILS:
00210                         nStyle = LVS_REPORT;
00211                         break;
00212 
00213                 case ID_VIEW_SMALLICON:
00214                         nStyle = LVS_SMALLICON;
00215                         break;
00216 
00217                 case ID_VIEW_LARGEICON:
00218                         nStyle = LVS_ICON;
00219                         break;
00220 
00221                 case ID_VIEW_LIST:
00222                         nStyle = LVS_LIST;
00223                         break;
00224                 }
00225 
00226                 // changer le style et repeindre automatiquement la fenêtre
00227                 if (nStyle != -1)
00228                         pView->ModifyStyle(LVS_TYPEMASK, nStyle);
00229         }
00230 }
00231 */
00232 int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
00233 {
00234         theApp.ResetCurrentDirectory();
00235 
00236         if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
00237                 return -1;
00238 
00239         CViewerView* pView = GetDocument()->GetViewerView();
00240 
00241         CRect   cRect = pView->GetViewerRect();
00242         KRect   kRect( cRect.left, cRect.top, cRect.right, cRect.bottom );
00243         m_pGameViewer = new KGameViewer( theApp.m_hInstance );
00244         if( !m_pGameViewer->Init( pView->m_hWnd, kRect ) )
00245                 return -1;
00246 
00247         GetDocument()->SetChildFrame( this );
00248 
00249         return 0;
00250 }
00251 
00252 void CChildFrame::OnDestroy()
00253 {
00254         CMDIChildWnd::OnDestroy();
00255 
00256         if( m_pGameViewer )
00257         {
00258                 m_pGameViewer->End();
00259                 if( m_pGameViewer )
00260                         Deletep( m_pGameViewer );
00261         }
00262 }
00263 
00264 bool CChildFrame::Manage()
00265 {
00266         if( m_pGameViewer )
00267                 m_pGameViewer->Run();
00268 
00269         return true;
00270 }
00271 
00272 BOOL CChildFrame::OnCommand(WPARAM wParam, LPARAM lParam)
00273 {
00274         // TODO : ajoutez ici votre code spécialisé et/ou l'appel de la classe de base
00275 
00276         return CMDIChildWnd::OnCommand(wParam, lParam);
00277 }
00278 
00279 void CChildFrame::OnDisplayShowselection()
00280 {
00281         // TODO : ajoutez ici le code de votre gestionnaire de commande
00282         CMenu*  pMenu = m_Menu.GetSubMenu( 2 );
00283         UINT    State = pMenu->GetMenuState( ID_DISPLAY_SHOWSELECTION, MF_BYCOMMAND );
00284         
00285         if( State & MF_CHECKED )
00286         {
00287                 pMenu->CheckMenuItem( ID_DISPLAY_SHOWSELECTION, MF_BYCOMMAND | MF_UNCHECKED );
00288                 GetDocument()->GetBottomView()->SetShowSelection( false );
00289                 GetDocument()->GetBottomView()->Refresh();
00290         }
00291         else
00292         {
00293                 pMenu->CheckMenuItem( ID_DISPLAY_SHOWSELECTION, MF_BYCOMMAND | MF_CHECKED );
00294                 GetDocument()->GetBottomView()->SetShowSelection( true );
00295                 GetDocument()->GetBottomView()->Refresh();
00296         }
00297 }
00298 
00299 void CChildFrame::OnSize(UINT nType, int cx, int cy)
00300 {
00301         CMDIChildWnd::OnSize(nType, cx, cy);
00302 
00303 //      if( m_wndSplitter3.GetSafeHwnd() )
00304 //              m_wndSplitter3.SplitRow( cy - 100 );
00305 
00306 }
00307 
00308 void CChildFrame::OnSizing(UINT fwSide, LPRECT pRect)
00309 {
00310         CMDIChildWnd::OnSizing(fwSide, pRect);
00311 
00312 //      m_wndSplitter3.SetRowInfo( 0, ( pRect->bottom - pRect->top ) - 100, 0 );
00313 
00314 //      m_wndSplitter3.m.MoveWindow( pRect, TRUE ); 
00315 /*      if( m_wndSplitter3.GetSafeHwnd() )
00316                 m_wndSplitter3.*/
00317 }

Generated on Sun Mar 25 20:02:17 2007 for Zythum Project by  doxygen 1.5.1-p1