Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Непонятки с HitTest и правым кликом в окне TreeCtr


Автор: AndreySol 8.10.2008, 00:34
Создаю окно дерева со следующими стилями: VS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_HSCROLL | TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS
и заполняю эл-тами.

Если пытаюсь обработать в OnNotify щелчек правой кнопкой мыша
Код

NMHDR* lpNMHDR = (NMHDR*)lParam;
if(lpNMHDR->code == NM_RCLICK)
{
    if(lpNMHDR->hwndFrom == m_TreeCtrl->GetSafeHwnd())
    {
        NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)lpNMHDR;

        CPoint ptTC;
        GetCursorPos(&ptTC);
        m_TreeCtrl->ScreenToClient(&ptTC);
        UINT uFlags = 0;
        HTREEITEM IsItem = m_TreeCtrl->HitTest(ptTC, &uFlags);
        if(IsItem != NULL)
        {    // попали в итем

        }
        else
        {    // попали в молоко

        }
    }
}

то всегда получается что попадаем в итем, даже если щелкнуть справа от его текста в молоко.
Да и сам итем подсвечивается при правом щелчке как при попадании в итем, так и при попадании в молоко справа от текста итема.
Такое ощущение, что для правого щелчка в TreeCtrl действует что-то вроде стиля FULLROWSELECT !
С этим можно как-то бороться ? Что бы получить нормальное разделение результата правого щелчка - или в итем или в молоко ?

Автор: Earnest 8.10.2008, 08:33
Результат попадания возвращается в переменной flags - там полная инфа о том, куда попали. А итемом, действительно, считается полная строка. Варианты флагов смотри в описании структуры TVHITTESTINFO.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)