Здравствуйте у меня есть свой класс:
сTreeView
{
std::map<string,HTREEITEM> m_NamesItem;
HTREEITEM m_select_element;
...................
void OnSelectNext();
void OnSelectLast();
void OnSelectItem(HTREEITEM hItem);
.........................................
}
Выделение элементов делаю так:
UINT cTreeView::isExpanded(HTREEITEM hItem)
{
UINT index=TreeView_GetItemState(m_hWnd,hItem,TVIS_EXPANDED );
return index;
}
void cTreeView::OnSelectItem(HTREEITEM hItem){
if(!isExpanded(hItem))
TreeView_Expand(m_hWnd,hItem,TVE_EXPAND);
::SendMessage(m_hWnd, TVM_SELECTITEM, TVGN_DROPHILITE, (LPARAM)hItem);
m_select_element=hItem;
}
Но вся проблема в том, что при выделении элемента не происходит скроллирования, хотя сам элемент подсвечивается, попробовал сделать так:
void cTreeView::OnSelectNext(){
HTREEITEM hItem;
......................................
OnSelectItem(hItem);
::SendMessage(m_hWnd, WM_VSCROLL, SB_LINEDOWN, 0);
::SendMessage( m_hWnd,WM_NCPAINT, 1, 0);
}
Теперь скролируеться, но всего на одну позицию (но это понятно), и если провести курсор над полосой прокрутки, то происходит правильное скролирование. Подскажите, как произвести скроллинг.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте у меня есть свой класс:
А>UINT cTreeView::isExpanded(HTREEITEM hItem)
А>{
А> UINT index=TreeView_GetItemState(m_hWnd,hItem,TVIS_EXPANDED );
А> return index;
А>}
А> void cTreeView::OnSelectItem(HTREEITEM hItem){
А> if(!isExpanded(hItem))
А> TreeView_Expand(m_hWnd,hItem,TVE_EXPAND);
А> ::SendMessage(m_hWnd, TVM_SELECTITEM, TVGN_DROPHILITE, (LPARAM)hItem);
А> m_select_element=hItem;
А>}
А>
А>Но вся проблема в том, что при выделении элемента не происходит скроллирования, хотя сам элемент подсвечивается, попробовал сделать так:
Честно говоря, я не совсем понял, чего хотел достичь автор, но не имеет ли смысл посмотреть в сторону TVM_ENSUREVISIBLE?
С уважением,
Заливочкин Евгений