MFC TreeCtrl atraviesa todos los nodos

Este ejemplo es principalmente para encontrar un nodo en el árbol y expandirlo para seleccionarlo. Adopta un método recursivo para lograrlo. Principales métodos utilizados:

CTreeCtrl :: GetChildItem
HTREEITEM GetChildItem (HTREEITEM hItem);
Valor de retorno: si tiene éxito, devuelve el identificador del elemento secundario; de lo contrario, devuelve NULL.

Usando el pensamiento recursivo, trate cada nodo atravesado como el nodo raíz y luego atraviese el nodo hijo en él.
El nodo hijo se considera como el nodo raíz una y otra vez, hasta que se atraviesen los nodos raíz reales y se termine todo el proceso. No está claro ver el código de un vistazo.

Código de botón

void CForTreeCtrlDlg :: OnBnClickedButton1 () 
{ 
	// TODO: Agregar código de controlador de notificación de control 

	UpdateData (TRUE); 

	vector <HTREEITEM> vecItem; 
	HTREEITEM root = treeCtrl.GetRootItem (); 
	// La primera capa del nodo raíz 
	mientras (root ! = NULL) { 

		vecItem.push_back (root); 
		root = treeCtrl.GetNextItem (root, TVGN_NEXT); 
	} 
	for (int q = (int) vecItem.size () -1; q> -1; q--) { 
		func (vecItem [q], m_find); 
	} 

}

 Función recursiva

void CForTreeCtrlDlg :: func (raíz HTREEITEM, condición CString) { 
	
	CString itemText = treeCtrl.GetItemText (root); 

	if (itemText.Find (condition)! = -1) { 

		treeCtrl.SelectItem (root); 
		treeCtrl.SetCheck (root, TRUE); 
		treeCtrl.Expand (root, TVM_EXPAND);	 
		return; 
	} 
	// El nodo hijo del nodo raíz 
	HTREEITEM A1 = treeCtrl.GetChildItem (root); 

	// El nodo hermano del 
	vector del nodo hijo <HTREEITEM> vecItem; 

	while (A1! = NULL) { 

		vecItem.push_back (A1); 
		A1 = treeCtrl.GetNextItem (A1, TVGN_NEXT); 
	} 

	for (int q = (int) vecItem.size () -1; q> -1; 

		q-- ) { CString itemText = treeCtrl.GetItemText (vecItem [q]); 

		if (itemText.Find (condition)! = -1) {

			treeCtrl.SelectItem (vecItem [q]); 
			treeCtrl.SetCheck (vecItem [q], TRUE); 
			treeCtrl.Expand (vecItem [q], TVM_EXPAND); 
			vecItem.clear (); 
			return; 
		} 
		else { 
			// recursive, hijo El nodo se utiliza como nodo raíz para recorrer la 
			función (vecItem [q], condición); 
		} 
	} 
}

 Construyendo código de nodo TreeCtrl

	// TODO: 在 此 添加 额外 的 初始化 代码
	CString root [2] = {TEXT ("A"), TEXT ("B")}; 

	for (int i = 0; i <2; i ++) 
	{ 
		HTREEITEM r = treeCtrl.InsertItem (root [i], NULL); 

		CString str; 
		for (int j = 0; j <3; j ++) 
		{ 
			str.Format (TEXT ("% s% d"), root [i], j + 1); 
			HTREEITEM j1 = treeCtrl.InsertItem (str, r); 

			CString str1; 
			for (int m = 0; m <3; m ++) { 

				str1.Format (TEXT ("% s% d% d"), root [i], j + 1, m + 1); 
				HTREEITEM m1 = treeCtrl.InsertItem (str1, j1); 

				CString str2; 
				para (int q = 0; q <3; q ++) { 

					str2.Format (TEXT ("% s% d% d% d"), raíz [i], j + 1, m + 1, q + 1); 
					HTREEITEM q1 = treeCtrl.InsertItem (str2,

					CString str3; 
					para (int s = 0; s <3; s ++) { 

						str3.Format (TEXT ("% s% d% d% d% d"), raíz [i], j + 1, m + 1, q + 1 , s + 1); 
						HTREEITEM s1 = treeCtrl.InsertItem (str3, q1); 
					} 
				} 
			} 
		} 
	}

 

Supongo que te gusta

Origin www.cnblogs.com/HelloQLQ/p/12678753.html
Recomendado
Clasificación