SoloCodigo

Programación General => C/C++ => Visual C++ => Mensaje iniciado por: lauritej en Martes 15 de Junio de 2004, 22:16

Título: Como Conseguir Todas Las Vistas Activas En Mfc
Publicado por: lauritej en Martes 15 de Junio de 2004, 22:16
:hola: a todos!!

Mi problema es que desde una función de la clase CMainFrame, quiero conseguir las vistas que estan activas, se que se puede utilizar la funcion GetActiveView, pero eso seria para la activa en ese momento, pero no para ir consiguiendo todas las abiertas una por una.

Si alguien tiene conocimientos del tema , lo agradeceria muxo.

Muchas gracias.
Título: Re: Como Conseguir Todas Las Vistas Activas En Mfc
Publicado por: navisoft en Lunes 19 de Julio de 2004, 02:21
Para obtener la lista de ventanas abiertas en una arquitectura MDI puedes intentarlo con este codigo:

Código: Text
  1.  
  2. CMDIFrameWnd  *m_frame = (CMDIFrameWnd *)AfxGetMainFrame();
  3. HWND hwnd;
  4.  
  5. hwnd=::GetWindow(m_pMDIFrame->m_hWndMDIClient, GW_CHILD);
  6. CString str = "Ventanas abiertas :";
  7.  
  8. while (hwnd != NULL)
  9. {
  10.   TCHAR  titulo[256];
  11.   ::GetWindowText(hwnd,titulo,sizeof(titulo)/sizeof(titulo[0]));
  12.   str +=  titulo;
  13.   str +=  "\n";
  14.   hwnd =::GetWindow(hwnd ,GW_HWNDNEXT);
  15. }
  16.  
  17. MessageBox(str);
  18.  
  19.  

Creo que funciona bien... :D

Si quieres hacer otras operaciones ... tienes la llave maestra en la variable  "hwnd"
Título: Re: Como Conseguir Todas Las Vistas Activas En Mfc
Publicado por: neac en Miércoles 4 de Agosto de 2004, 15:09
Que tal...

Tambien puedes obtenerlas asi...


CWinApp   *pApp = AfxGetApp();
CGSEDoc   *pDoc;
CGSEView   *pView;

CDocTemplate*pTemplate;
POSITION   pos,pos2,pos3;
      
ASSERT_VALID(this);

if (pApp->m_pDocManager == NULL)
return ;

      m_ListaVistas.ResetContent();

         
      pos = pApp->m_pDocManager->GetFirstDocTemplatePosition();

      while (pos != NULL)
      {
         pTemplate = pApp->m_pDocManager->GetNextDocTemplate(pos);
         ASSERT_VALID(pTemplate);
         ASSERT_KINDOF(CDocTemplate, pTemplate);

         pos2 = pTemplate->GetFirstDocPosition();

         while (pos2)
         {
            pDoc = (CGSEDoc*)pTemplate->GetNextDoc(pos2);

            pos3 = pDoc->GetFirstViewPosition();

            pView = (CGSEView *)pDoc->GetNextView(pos3); // get first one

            ASSERT_VALID(pView);

            if(pView)
            {
               if(m_ListaVistas.FindStringExact(0,pDoc->GetTitle())<0)
               {
                  if(b_IsMap&&pView->EsMap())
                     m_ListaVistas.AddString(pDoc->GetTitle());
                  else if (!b_IsMap&&!pView->EsMap())
                     m_ListaVistas.AddString(pDoc->GetTitle());
               }//if
            }
         }//while2
      }//while1