[MFC] Cum aflam view-ul activ intr-o aplicatie MDI?

Despre MFC, ATL si alte biblioteci C++ de la Microsoft (forum moderat)
Post Reply
User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

[MFC] Cum aflam view-ul activ intr-o aplicatie MDI?

Post by Ovidiu Cucu » 31 Jul 2011, 10:34

Problema
Intr-o aplicatie MDI am mai multe template-uri de document cu view-uri de tipuri diferite.
Dintr-un anume motiv trebuie sa stim la un moment dat de ce tip este view-ul activ.
Cum poutem afla aceasta?

Rezolvare
  1. Avand un pointer la frame-ul principal, chemam CMDIFrameWnd::MDIGetActive care intoarce frame-ul MDI-child activ.
  2. Obtinem view-ul activ cu CFrameWnd::GetActiveView.
  3. In sfarsit, vedem de ce tip este cu CObject::IsKindOf.
Exemplu

Code: Select all

   CMDIChildWnd* pFrame = ((CMDIFrameWnd*)AfxGetMainWnd())->MDIGetActive();
   if(NULL != pFrame)    
   {       
      CView* pView = pFrame->GetActiveView();
      if(NULL != pView)       
      {          
         if(pView->IsKindOf(RUNTIME_CLASS(CRecordsListView)))          
         {             
            // The active view is of type 'CRecordsListView'          
         }          
         else if(pView->IsKindOf(RUNTIME_CLASS(CUpdateFormView)))          
         {             
            // The active view is of type 'CUpdateFormView'
         }
         //...      
      }    
   }
Note
  1. Pentru a putea folosi IsKindOf(RUNTIME_CLASS(... trebuie sa ne asiguram ca view-urile contin macrourile DECLARE_DYNCREATE si IMPLEMENT_DYNCREATE.
  2. Acest tip este din categoria "good to be known" pentru situatii custom speciale. In general nu este nevoie de aflat tipul view-ului intr-o aplicatie MDI pentru ca operatii curente care depind de view-ul activ sunt deja implementate in framework-ul MFC.
Vezi si << Back to MFC index



Post Reply