CTreeView neu zeichnen / aktualisieren

RuFFnEcK

Erfahrenes Mitglied
Hallo zusammen,

also ich hab hier ein MDI Projekt mit gesplittetem Fenster.
Ich will Abhängig von der Userauswahl im Hauptfenster Subknoten anzeigen bzw. ausblenden. Das ganze funktioniert, jedoch muß man einmal einen anderen Knoten anklicken und wieder den "Vaterknoten" anklicken damit das ganze aktualisiert wird...
Ich mache rufe die Funktion im View des hauptfenster wie folgt auf:

Code:
//...
	CSplitterWnd* pWndSplitter = (CSplitterWnd*) GetParent();
	if (!pWndSplitter || !::IsWindow(pWndSplitter->m_hWnd))
		return;
	CDriveTreeView* pDriveTreeView = (CDriveTreeView*) pWndSplitter->GetPane(0, 0);
	if (pDriveTreeView && ::IsWindow(pDriveTreeView->m_hWnd))
		pDriveTreeView->BuildFeedbackSubTree ();


	pDriveTreeView->Invalidate ();
	pDriveTreeView->RedrawWindow();
	//pWndSplitter->RedrawWindow();
//...

Dabei prüft diese Funktion die Einstellungen und erzeugt die Subknoten:

Code:
void CDriveTreeView::BuildFeedbackSubTree ()
{
	CDriveDoc* pDoc = GetDocument();
	CString strBuffer;
	RemoveSubItems(m_WizTreeStruct.hItemFeedback);
	memset(&m_FeedbackTreeStruct, 0x00, sizeof(m_FeedbackTreeStruct));

	if ( pDoc->m_DriveParm.nFbtype == 7 || pDoc->m_DriveParm.nFbtype == 8 || pDoc->m_DriveParm.nFbtype == 16 || pDoc->m_DriveParm.nFbtype == 17 || 
		pDoc->m_DriveParm.nFbtype == 19 || pDoc->m_DriveParm.nFbtype == 21 || pDoc->m_DriveParm.nFbtype == 30) {
		strBuffer.LoadString(IDS_WAKE_AND_SHAKE);
		m_FeedbackTreeStruct.hItemWakeAndShake = GetTreeCtrl().InsertItem(strBuffer, IMGLIST_CAN_PDO, IMGLIST_CAN_PDO,
			m_WizTreeStruct.hItemFeedback, TVI_LAST);
		GetTreeCtrl().SetItemData(m_FeedbackTreeStruct.hItemWakeAndShake, ITEMDATA_WAKE_AND_SHAKE);
	}
	if ( true ){//pDoc->m_DriveParm.nFbtype == 10 ) {
		strBuffer.LoadString(IDS_SYNCHRON_SENSORLESS);
		m_FeedbackTreeStruct.hItemSynchronSensorless = GetTreeCtrl().InsertItem(strBuffer, IMGLIST_CAN_PDO, IMGLIST_CAN_PDO,
			m_WizTreeStruct.hItemFeedback, TVI_LAST);
		GetTreeCtrl().SetItemData(m_FeedbackTreeStruct.hItemSynchronSensorless, ITEMDATA_SYNCHRON_SENSORLESS);
	}
}

Hab schon fast überlegt zwischen zwei Knoten zu wechseln, damit die Subknoten korrekt angezeitg werden, aber das kann ja nicht die Lösung sein!
Weiß jemand Rat?
 
Zuletzt bearbeitet:
Ein Invalidate erzwingt üblicherweise ein Neuzeichnen. Das sollten Node-Änderungen aber auch tun.

Prüf mal, ob da nicht irgend etwas anderes dazwischenfunkt.
 
Also ich habs jetzt etwas dreckig gelöst und schick dem TreeView einfach ne Message die kurz eine andere Seite auswählt und dann wieder zurück springt. So kann ich das Neuerstellen erzwingen ;)
Habe schon viel zu viel Zeit daran verschwendet :(
Aber trotzdem danke!
 
Zurück