Preventing editing item labels in tree view


This article was contributed by Marius Bakelis.

If we have created tree view control with the TVS_EDITLABELS style we can edit all its items labels. But sometimes we do need that not all tree view control items labels could be editable. So we must prevent editing of item labels we don't want to be editable. We can override the PreTranslateMessage() function:



BOOL CTreeCtrlX::PreTranslateMessage(MSG* pMsg) 
{
    if( pMsg->message == WM_LBUTTONDOWN )
    {
		UINT		flag = TVHT_ONITEMLABEL;
		CPoint		pt = pMsg->pt;

		ScreenToClient(&pt);
		
		if( HitTest( pt, &flag ) == GetSelectedItem() 
			// && there you can check is the item which cannot be editable
			)
		{
			SetFocus();	//We must set focus to the tree view control
					//becouse it can have no focus

			return TRUE ;   // DO NOT process further
		}
    }

    return CTreeCtrl::PreTranslateMessage(pMsg);
}