La Red de Conocimientos Pedagógicos - Currículum vitae - Árbol VC++, evento de nodo de clic

Árbol VC++, evento de nodo de clic

Muy simple:

Paso 1: Asocia una variable CTreeCtrl con tu control de árbol en el asistente (tal como m_Mess en tu código)

Paso 2: En asistente, agregue el mensaje NM_Click del control de árbol (es decir, el mensaje de clic del mouse, lo siguiente supone que la función se llama OnClickTree)

Paso 3: Agregue sus datos en el código (principalmente en el función que inicializa los datos del control de árbol, como OnInitDialog() en su código)

HTREEITEM hRoot = m_ctrlTree.InsertItem("Beijing");

m_ctrlTree.SetItemData(hRoot , 1);

HTREEITEM hChild = m_ctrlTree.InsertItem("Distrito Chaoyang", hRoot);

m_ctrlTree.SetItemData(hChild, 2);

hChild = m_ctrlTree.InsertItem("Haidian District", hRoot);

m_ctrlTree.SetItemData(hChild, 3);

Nota: utilicé la función SetItemData anterior, principalmente para agregar diferentes etiquetas a diferentes nodos

Puedes ver su efecto en la función de mensaje de clic a continuación

Paso 4: agrega la función OnClickTree Código de respuesta de mensaje de clic del mouse

CPoint pt = GetCurrentMessage()->pt; //Obtener el punto de coordenadas del mensaje de clic actual del mouse

m_ctrlTree.ScreenToClient(&pt); del control de árbol

UINT uFlags = 0;

HTREEITEM hItem = m_ctrlTree.HitTest(pt, &uFlags);//Luego haga clic en Probar

if (( hItem != NULL) && (TVHT_ONITEM & uFlags))//Si la posición en la que se hizo clic está por encima de la posición del nodo

{

m_ctrlTree .SelectItem(hItem);

//Obtiene los datos que configuramos al principio. Tenga en cuenta que es por eso que 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 usar la comparación de cadenas para determinar en qué nodo se hizo clic

int nDat = m_ctrlTree .GetItemData(hItem);

// Luego puedes completar diferentes acciones según los diferentes nodos

switch (nDat)

{

caso 1:

AfxMessageBox("Beijing");

descanso;

caso 2:

AfxMessageBox(" Beijing- >Distrito de Chaoyang");

descanso;

caso 3:

AfxMessageBox("Beijing->Distrito de Haidian");

romper;

predeterminado:

AfxMessageBox("ERROR");

}

}

// Si esto aún no resuelve tu problema, me quedo sin palabras, dame puntos, jefe, jajajajaja