Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Funcion recursiva para recorrer un treeviev

Iniciado por ethernet, 03 de Noviembre de 2002, 07:37:53 PM

« anterior - próximo »

ethernet



    Al control treeview a mi juicio le faltan algunas funciones como CheckAll o FindItem. Para esto escribi estas funciones. Lo que hacen es simplemente ir recorriendo el control, si tienen hijos no es archivo y por lo tanto entra y busca hermanos si son carpetas(tienen hijos) se vuelve a llamar a si misma hasta que no tiene mas hijos y entonces lo chekea y se ajustan los contadores. Siempre hay que conservar el valor anterior del HTREEITEM "hElementoMem" para volver a las precesivas carpetas cuando termina la llamada a la funcion recursiva y vuelve para terminar la funcion. Observar que se declara la variable hElementoMem dentro del bucle y que cada vez que se vuelve a llamar a la funcion recursiva se crea otra nueva variable y asi indefinidamente.
    Con este sistema tambien se podrian buscar cadenas de texto en los items para que por ejemplo al pulsar sobre ellos se cargue el archivo y tambien lo he usado para montar la ruta completa del mismo y asi no tener que guardar un array con las rutas completas.

    PD: Supongo que vosotros esto lo tendreis mas que visto, pero si no es asi o creeis que es de interes, gustoso os mandare los otros ejemplos citados en la descripcion.






void CReempView::SelTodoLista()//Al cargar una lista de archivos en un treeview con checks ejecutamos esta funcion

{

 nArchTotal=0;

nArchCheq=0;

 

hElemento=m_CtrlLista.GetRootItem();

m_CtrlLista.SetCheck(hElemento);

m_CtrlLista.GetChildItem(hElemento);



RecurSelTodoLista();

}



void CReempView::RecurSelTodoLista()//Funcion recursiva

{



do{

 if(!m_CtrlLista.ItemHasChildren(hElemento))//Si no tiene hijos

 {

  m_CtrlLista.SetCheck(hElemento,bSelTodo);

  hElemento=m_CtrlLista.GetNextSiblingItem(hElemento);

  nArchTotal++;

  nArchCheq++;  

 }

 else if(m_CtrlLista.ItemHasChildren(hElemento))//Si Tiene Hijos

 {

  HTREEITEM hElementoMem;

 

  hElementoMem=hElemento;

  m_CtrlLista.SetCheck(hElemento,bSelTodo);

  hElemento=m_CtrlLista.GetChildItem(hElemento);

  RecurSelTodoLista();

  hElemento=hElementoMem;

  hElemento=m_CtrlLista.GetNextSiblingItem(hElemento);

 }

}while(hElemento!=NULL);

}








    Éste código fue enviado por Antares el 28 de octubre del 2002
orionmaps@tiscali.es

Si quieres enviar tu propio código hazlo a  eth_cotd@lycos.es

    fiero

                                    Sin duda, una forma peculiar de función recursiva  :) ...

    Por optimizar un poquillo, yo diria que sobra código en la siguiente línea:


    else if(m_CtrlLista.ItemHasChildren(hElemento))


    ya que es la misma comparación pero a la inversa yo pondría solo esto  :ojo: :


    else



    un saludo                                
    www.videopanoramas.com Videopanoramas 3D player






    Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
    Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
    Muchísimas gracias.