Árbol VC++, evento de nodo de clic
Paso 1: asociar una variable CTreeCtrl (como m_Mess en el código) al control de árbol en el asistente.
Paso 2: agregar NM_Click al control de árbol en el Mensaje del asistente (es decir, mensaje de clic del mouse, asumiendo que el nombre de la función es OnClickTree)
Paso 3: agregue datos en el código (principalmente en la función que inicializa los datos de control del árbol, como OnInitDialog (en el código) )
Paso 4: Asociar una variable CTreeCtrl para el control del árbol en el asistente (como m_Mess en el código. Agregar datos en el código (principalmente en la función que inicializa los datos del control del árbol, como). en el código de la función OnInitDialog())
HTREEITEM hRoot = m_ctrlTree.InsertItem("Beijing");
m_ctrlTree.SetItemData(hRoot, 1);
HTREEITEM hChild = m_ctrlTree.InsertItem("Chaoyang District", hRoot);
m_ctrlTree.SetItemData(hChild, 3);
Nota: utilicé la función SetItemData anterior, principalmente para Diferentes los nodos agregan diferentes etiquetas
Esto se puede ver en la función de mensaje de clic a continuación
Paso 4: agregue el código de respuesta del mensaje de clic del mouse en la función OnClickTree
CPoint pt = GetCurrentMessage()->pt; //Obtiene el punto de coordenadas del mensaje de clic actual del mouse
m_ctrlTree.ScreenToClient(& pt); control
UINT uFlags = 0;
HTREEITEM hItem = m_ctrlTree.HitTest(pt, &. uFlags);//luego haz la prueba de clic
if ( (hItem != NULL) & & (TVHT_ONITEM & uFlags))//Si el clic está por encima de la posición del nodo
{
m_ctrlTree.SelectItem(hItem );
//Obtenga los datos que configuramos al principio, observe que aquí es donde comencé a configurar datos diferentes para cada nodo. Por supuesto, si tiene menos nodos de datos, también puede obtener el texto del nodo. , como "Distrito Haidian" establecido anteriormente, y luego compare las cadenas para determinar en qué nodo se hizo clic
int nDat = m_ctrlTree.
GetItemData(hItem);
// Luego, dependiendo del nodo, puedes completar diferentes operaciones
switch (nDat)
{ p>
caso 1:
AfxMessageBox("Beijing");
descanso;
caso 2:
AfxMessageBox( "Beijing- >Distrito de Chaoyang" );
pausa;
caso 3:
AfxMessageBox("Beijing->Distrito de Haidian");
romper;
predeterminado:
AfxMessageBox("ERROR");
}<
}
/ /Si todavía no puedo entender cuál es tu problema, me quedo sin palabras. Por favor, dame un me gusta, jefe, jajajajajajaja
.