• Domingo 19 de Mayo de 2024, 03:06

Autor Tema:  Como Conseguir Todas Las Vistas Activas En Mfc  (Leído 1451 veces)

lauritej

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Como Conseguir Todas Las Vistas Activas En Mfc
« en: Martes 15 de Junio de 2004, 22:16 »
0
: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.

navisoft

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
    • http://www.latindevelopers.com
Re: Como Conseguir Todas Las Vistas Activas En Mfc
« Respuesta #1 en: Lunes 19 de Julio de 2004, 02:21 »
0
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"

neac

  • Nuevo Miembro
  • *
  • Mensajes: 10
  • Nacionalidad: co
    • Ver Perfil
Re: Como Conseguir Todas Las Vistas Activas En Mfc
« Respuesta #2 en: Miércoles 4 de Agosto de 2004, 15:09 »
0
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