Á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