Home   Artículos   Recursos   Foros   
Artíclos recientes publicados en Latindevelopers:

Visual C++: NSDoubleEdit: Un control para el manejo de números decimales en Visual C++.
Visual C++: Implementando una Calculadora en Visual C++
Visual C++: CCommandLine: Una clase para el uso de la linea de comando
Visual C++: Una clase para el manejo del Registro


arbol y seleccionar item

Aqui programadores en la plataforma Win32 con Visual C++ de Microsoft...

Moderador: latindeveloper

arbol y seleccionar item

Notapor atp el Jue Abr 19, 2007 7:02 am

Hola, de nuevo.

Tengo una nueva duda.

Yo tengo un árbol en mi aplicación basada en dialogos. Siempre hay algún elemento seleccionado. Cuando pulso el botón derecho del ratón aparece un pequeño menú.

Lo que yo quiero es qeu cuando se pulse el botón derecho del mause sobre un elemento cualquiera, este elemento se quede seleccionado, ya que el elemento seleccionado sigue siendo el que estaba antes de presionar el botón derecho del ratón.

ESpero que alguien me pueda ayudar.

Gracias de antemano.
atp
Usuario Muy Activo
Usuario Muy Activo
 
Mensajes: 132
Registrado: Mar Ene 03, 2006 3:52 pm

Re: arbol y seleccionar item

Notapor latindeveloper el Sab Abr 21, 2007 12:18 pm

Pon este codigo antes o despues de mostrar el menu:

Código: Seleccionar todo
   HTREEITEM htCurrent = tc.GetSelectedItem();
   tc.SetItemState(htCurrent,TVIS_SELECTED,TVIS_SELECTED);
Imagen
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:29 pm
Ubicación: Peru

Re: Re: arbol y seleccionar item

Notapor atp el Sab Abr 21, 2007 2:22 pm

Hola de nuevo, he probado a poner el código indicado pero no me soluciona el problema.

El código que tengo en la función que se ejecuta al pulsar el botón derecho del mouse es:

Re: arbol y seleccionar

void CArbolesDlg::OnRclickTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here

HTREEITEM hitem = m_arbol.GetSelectedItem();
m_arbol.SetItemState(hitem,TVIS_SELECTED,TVIS_SELECTED);

CMenu menu;
CPoint point;
GetCursorPos(&point);
menu.LoadMenu(IDR_MENU1);
menu.EnableMenuItem(ID_OPCIN1_B,MF_DISABLED | MF_GRAYED );
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN, point.x ,point.y ,this);

*pResult = 0;

}

Al pulsar una de las opciones del menú se ha de mostrar el con un MessageBox el contenido del nodo sobre el que se ha pulsado con el botón derecho del ratón. Pero no se muestra el contenido de ese elemento. Se muestra el contenido del elemento que estaba seleccionado antes de mostrar el menú al pulsar el botón derecho.

Saludos, y gracias.
atp
Usuario Muy Activo
Usuario Muy Activo
 
Mensajes: 132
Registrado: Mar Ene 03, 2006 3:52 pm

otro nuevo problema

Notapor atp el Dom Abr 29, 2007 5:15 pm

Ya sé cual es el nodo sobre el que se ha pulsado con el botón derecho del ratón.

Para ello tan solo he se ha de poner el siguiente trozo de código antes de mostrar el menú:

HTREEITEM concepto;
concepto = m_arbol.GetDropHilightItem();

Pero ahora surge otro problema. El nuevo problemas es que ya no debe aparecer como seleccionado el nodo que estuviera seleccionado antes de pulsar el botón derecho del ratón. Es decir, imaginemos que el arbol tiene solo 10 nodos (item1,item2,...., item10) y que el nodo seleccionado es el item5. Entonces cuando se pulse con el botón derecho sobre otro nodo, por ejemplo el 8, el nodo item5 tiene que aparecer sin seleccionar. Pero no se como se desselecciona un nodo de un arbol

Saludos,
Antonio.
atp
Usuario Muy Activo
Usuario Muy Activo
 
Mensajes: 132
Registrado: Mar Ene 03, 2006 3:52 pm

Re: otro nuevo problema

Notapor latindeveloper el Lun Abr 30, 2007 12:13 pm

Si intentas con:

atp escribió:HTREEITEM concepto;
concepto = m_arbol.GetDropHilightItem();
m_arbol.SetItemState(concepto,TVIS_SELECTED,TVIS_SELECTED);
Imagen
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:29 pm
Ubicación: Peru

sí pero aún no

Notapor atp el Lun Abr 30, 2007 2:00 pm

Antes de nada agradecer la respuesta, pero eso ya lo intenté y SÍ funciona.

EL problema es qeu tambíen sigue seleccionado el nodo que estuviera seleccionado anteriormente al que se pulso con el botón derecho del mouse.

Y ya puesto se me ocurre preguntar otra duda:
¿como se puede hacer que no apareca el menú al pulsar con el botón derecho del mouse si no se ha pulsado con dicho botón ningún nodo???

Gracias de antemano.

El código que tengo al pulsar el bóton derecho es:

CString sstring;

concepto = m_arbol.GetDropHilightItem();
m_arbol.SetItemState(concepto,TVIS_SELECTED,TVIS_SELECTED);

CMenu menu;
CPoint point;
GetCursorPos(&point);
menu.LoadMenu(IDR_MENU1);
menu.EnableMenuItem(ID_OPCIN1_B,MF_DISABLED | MF_GRAYED );
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN,point.x ,point.y ,this);
*pResult = 0;
atp
Usuario Muy Activo
Usuario Muy Activo
 
Mensajes: 132
Registrado: Mar Ene 03, 2006 3:52 pm

ya se deseleccionar un item, pero aun encuentro problemas

Notapor atp el Mar May 01, 2007 3:55 am

Ya sé como se deselecciona un item seleccionado, tan solo hay que poner:

m_arbol.SetItemState(h,0,TVIS_SELECTED);

Ahora bien, tengo el siguiente trozo de código:

void CArbolesDlg::OnRclickTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CString sstring;
HTREEITEM h;

if(concepto != NULL){
m_arbol.SetItemState(concepto,0,TVIS_SELECTED);
}

concepto = m_arbol.GetDropHilightItem();

if(concepto != NULL){
h = m_arbol.GetSelectedItem();
m_arbol.SetItemState(h,0,TVIS_SELECTED);
m_arbol.SetItemState(concepto,TVIS_SELECTED,TVIS_SELECTED);
m_arbol.SetItemState(concepto,TVIS_SELECTED,TVIS_SELECTED);



CMenu menu;
CPoint point;
GetCursorPos(&point);
menu.LoadMenu(IDR_MENU1);
menu.EnableMenuItem(ID_OPCIN1_B,MF_DISABLED | MF_GRAYED );
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN,point.x ,point.y ,this);
*pResult = 0;
}

El último nodo del todo y a veces el primero nunca sale el menu al presionar con el botón derecho del ratón sobre ellos. No sé porqué ni como hacer para que salgan seleccionados.

Saludos y Gracias de antemano.
atp
Usuario Muy Activo
Usuario Muy Activo
 
Mensajes: 132
Registrado: Mar Ene 03, 2006 3:52 pm


Volver a Visual C++

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados