Programación General > Visual C++

 Como Conseguir Todas Las Vistas Activas En Mfc

(1/1)

lauritej:
: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:
Para obtener la lista de ventanas abiertas en una arquitectura MDI puedes intentarlo con este codigo:


--- Código: Text --- CMDIFrameWnd  *m_frame = (CMDIFrameWnd *)AfxGetMainFrame();HWND hwnd; hwnd=::GetWindow(m_pMDIFrame->m_hWndMDIClient, GW_CHILD);CString str = "Ventanas abiertas :"; while (hwnd != NULL){  TCHAR  titulo[256];  ::GetWindowText(hwnd,titulo,sizeof(titulo)/sizeof(titulo[0]));  str +=  titulo;  str +=  "\n";  hwnd =::GetWindow(hwnd ,GW_HWNDNEXT);} MessageBox(str);  
Creo que funciona bien... :D

Si quieres hacer otras operaciones ... tienes la llave maestra en la variable  "hwnd"

neac:
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

Navegación

[0] Índice de Mensajes

Ir a la versión completa