Iconos en CTreeView

23/08/2004 - 11:39 por Sergio | Informe spam
Hola grupo.
Estoy intentando hacer un explorador de windows dentro de un programa,
pero tengo un problema para mostrar los iconos. El problema esta en que
me muestra todo el rato el mismo. Si el último que he cargado es un txt,
pues todos con el icono del notepad.
Hay algún método "mágico"?
Y ya que estoy, ¿se puede mostrar el símbolo [+] (el de expandir una
rama) apesar de que no tenga ningún subitem esa rama?
http://www.jabber.org
http://www.jabberes.org
http://www.miranda-im.org

Preguntas similare

Leer las respuestas

#1 Angel J. Hernández
23/08/2004 - 19:10 | Informe spam
Aja... cómo traes los iconos? Yo por lo general lo hago con un imagelist,
por ejemplo:

// Se supone que ya has cargado el ImageList

CTreeCtrl* pTree = (CTreeCtrl*) GetDlgItem(IDC_TREEVIEW);
pTree->SetImageList(&m_imagelst, TVSIL_NORMAL); // m_imagelst = CImageList

// Estructura con información a insertar
TV_INSERTSTRUCT tvinsert;

tvinsert.hParent = NULL;
tvinsert.hInsertAfter = TVI_LAST;
tvinsert.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT;
tvinsert.item.hItem = NULL;
tvinsert.item.state = 0;
tvinsert.item.stateMask = 0;
tvinsert.item.cchTextMax = 6;
tvinsert.item.iSelectedImage = 0;
tvinsert.item.cChildren = 0;
tvinsert.item.lParam = 0;
tvinsert.item.pszText = "Nodo Principal";
tvinsert.item.iImage= 2;


HTREEITEM hRoot = pTree->InsertItem(&tvInsert);

Haces así y cuando necesites insertar un nodo hijo estableces el miembro
hParent de la estructura al nodo padre...

También debes programar el evento TVN_SELCHANGED

Ejemplo

void tuclase::OnTvnSelchangedTreeView(NMHDR *pNMHDR, LRESULT *pResult) {
LPNMTREEVIEW pNMTreeView = reinterpret_cast <LPNMTREEVIEW> (pNMHDR);
CTreeCtrl* pTree = (CTreeCtrl*) GetDlgItem(IDC_TREEVIEW);
HTREEITEM hSelected = pNMTreeView->itemNew.hItem;

if (hSelected != NULL) {
char text[30];
TV_ITEM item;
item.mask = TVIF_HANDLE | TVIF_TEXT;
item.hItem = hSelected;
item.pszText = text;
item.cchTextMax = 29;
VERIFY(pTree->GetItem(&item));
SetDlgItemText(IDC_SELECCIONADO, text);
}
*pResult = 0;
}

Espero te sirva... Saludos


Angel J. Hernández M.
MCSD






"Sergio" escribió en el mensaje
news:
Hola grupo.
Estoy intentando hacer un explorador de windows dentro de un programa,
pero tengo un problema para mostrar los iconos. El problema esta en que
me muestra todo el rato el mismo. Si el último que he cargado es un txt,
pues todos con el icono del notepad.
Hay algún método "mágico"?
Y ya que estoy, ¿se puede mostrar el símbolo [+] (el de expandir una
rama) apesar de que no tenga ningún subitem esa rama?
http://www.jabber.org
http://www.jabberes.org
http://www.miranda-im.org
Respuesta Responder a este mensaje
#2 Sergio
25/08/2004 - 09:08 | Informe spam
Angel J. Hernández wrote:
Aja... cómo traes los iconos? Yo por lo general lo hago con un imagelist,
por ejemplo:



Gran pregunta, yo lo hago tb con un image list, pero no se como cargar
todos los iconos registrados en windows. Solo consigo cargar el último:

CImageList sysImgList;
SHFILEINFO shFinfo;
sysImgList.Attach((HIMAGELIST)SHGetFileInfo("C:",
0,
&shFinfo,
sizeof( shFinfo ),
SHGFI_SYSICONINDEX |
SHGFI_SMALLICON ));
m_estructura.SetImageList( &sysImgList, TVSIL_NORMAL ); //m_estructura =
CImageList
sysImgList.Detach();

Pero no se como hacer para cargar todos los iconos.


http://www.jabber.org
http://www.jabberes.org
http://www.miranda-im.org
Respuesta Responder a este mensaje
#3 Sergio
25/08/2004 - 13:11 | Informe spam
Sergio wrote:
Angel J. Hernández wrote:

Aja... cómo traes los iconos? Yo por lo general lo hago con un imagelist,
por ejemplo:




Gran pregunta, yo lo hago tb con un image list, pero no se como cargar
todos los iconos registrados en windows. Solo consigo cargar el último:

CImageList sysImgList;
SHFILEINFO shFinfo;
sysImgList.Attach((HIMAGELIST)SHGetFileInfo("C:",
0,
&shFinfo,
sizeof( shFinfo ),
SHGFI_SYSICONINDEX |
SHGFI_SMALLICON ));
m_estructura.SetImageList( &sysImgList, TVSIL_NORMAL ); //m_estructura =
CImageList
sysImgList.Detach();

Pero no se como hacer para cargar todos los iconos.





Bueno pues nada tan sencillo como sustituir en el primer argumento de la
función SHGetFileInfo el C: por C:\\

Y para cada elemento que quiero cargar:
SHGetFileInfo(ruta,0,&shFinfo,sizeof( shFinfo ),SHGFI_ICON |
SHGFI_SMALLICON );
iIcon = shFinfo.iIcon;
DestroyIcon( shFinfo.hIcon );

SHGetFileInfo(ruta,0,&shFinfo,sizeof( shFinfo ),SHGFI_ICON |
SHGFI_OPENICON | SHGFI_SMALLICON );
iIconSel = shFinfo.iIcon;
DestroyIcon( shFinfo.hIcon );

item =
m_estructura.InsertItem(FileData.cFileName,iIcon,iIconSel,parent,TVI_SORT);

http://www.jabber.org
http://www.jabberes.org
http://www.miranda-im.org
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida