The problem seems to be that when using Unicode instead of MBCS, setting TVIS_FOCUSED attribute resets TVIS_SELECTED for current selected item. Thus for shift selection the function DoPreSelection must be corrected by adding if (m_hSelect != hItem) SetItemState( m_hSelect, TVIS_SELECTED, TVIS_SELECTED); //JP !!! after the first SetItemState call. Similarily for control key in DoAction after if (nDone == 1) add: HTREEITEM hSel = GetSelectedItem(); //added SetItemState(hItem, TVIS_FOCUSED|nState, TVIS_FOCUSED|TVIS_SELECTED); //existing if (hSel != NULL && hSel != hItem) //added SetItemState( hSel, TVIS_SELECTED, TVIS_SELECTED); //added
http://www.codeguru.com/cpp/controls/treeview/multiview/article.php/c9219/Advanced-Tree-Control.htm
解决办法是一位朋友回复的。