У меня была такая же проблема, и я могу подтвердить, что CCM_SETVERSION не работал. Фактически, единственное, что надежно сработало для меня, это переустановить текст после , когда процесс рисования был закончен. Я сделал это, поймав сообщение TVN_ITEMEXPANDING и заново установив текст. Это исправит текст всех подпунктов, когда узел развернут. Конечно, это не работает для жирных корневых узлов.
Вот набросок моего кода:
BEGIN_MESSAGE_MAP(CTreeViewEx, CTreeView)
ON_NOTIFY_REFLECT(TVN_ITEMEXPANDING, OnItemExpanding)
END_MESSAGE_MAP()
void CTreeViewEx::OnItemExpanding(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
if(pNMTreeView==NULL) {
return;
}
HTREEITEM hTreeItem = pNMTreeView->itemNew.hItem;
if(hTreeItem!=NULL) {
ReevaluteItemTextOfChildren(hTreeItem);
...
}
}
void CTdTreeViewEx::ReevaluteItemTextOfChildren(HTREEITEM hRootNode)
{
if (hRootNode == NULL) {
return;
}
CTreeCtrl& ctlTree = GetTreeCtrl();
HTREEITEM hTreeItemCursor = ctlTree.GetNextItem(hRootNode, TVGN_CHILD);
// Loop over all siblings
while (hTreeItemCursor != NULL) {
// Change the text of the current item
CString csItemText(ctlTree.GetItemText(hTreeItemCursor));
ctlTree.SetItemText(hTreeItemCursor, csItemText);
// Get the next brother
HTREEITEM hNextSibling = ctlTree.GetNextItem(hTreeItemCursor, TVGN_NEXT);
hTreeItemCursor = hNextSibling;
}
}