В OnCreate() окна делаю так:
OnCreate()
{
m_tree.Create(m_hWnd,NULL,NULL, TVS_FULLROWSELECT | TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES | TVS_EDITLABELS| TVS_DISABLEDRAGDROP| WS_CHILD | WS_VISIBLE );
m_tree.SetImageList(m_images, TVSIL_NORMAL);
}
Затем из какого-нибудь обработчика (меню):
AddItem()
{
HTREEITEM item = tree.GetSelectedItem();
HTREEITEM parent = item ? item : TVI_ROOT;
tree.InsertItem("ttt", hParent, TVI_LAST);
}
Если элементов в контроле нет или нет выделенных, tree.GetSelectedItem() как и требуется, возвращает NULL.
Но если есть элементы, то при клике просто в контроле (не по элементу), выделяется первый элемент.
И после этого снять выделение, то есть добиться, чтобы tree.GetSelectedItem() вернул NULL не могу.
Другие элементы выделять можно.
В общем хотелось бы следущего, при клике внутри контрола (не по элементу) снимать любое выделение.
tree.SelectItem(NULL) поможет, вот только в каком обработчике это сделать, я не знаю.
Здравствуйте, <Аноним>, Вы писали:
А>Если элементов в контроле нет или нет выделенных, tree.GetSelectedItem() как и требуется, возвращает NULL.
А>Но если есть элементы, то при клике просто в контроле (не по элементу), выделяется первый элемент.
А>И после этого снять выделение, то есть добиться, чтобы tree.GetSelectedItem() вернул NULL не могу.
А>Другие элементы выделять можно.
А>В общем хотелось бы следущего, при клике внутри контрола (не по элементу) снимать любое выделение.
А>tree.SelectItem(NULL) поможет, вот только в каком обработчике это сделать, я не знаю.
Как вариант:
class CMumble {
// ...
int m_nTreeID;
public:
CMumble() : m_nTreeID(-1)
{
// ...
}
// ...
BEGIN_MSG_MAP(CMumble)
// ...
NOTIFY_HANDLER(m_nTreeID, NM_CLICK, OnClickHandler)
// ...
END_MSG_MAP()
// ...
OnCreate()
{
// Has m_hWnd been initialized yet ?
m_tree.Create(m_hWnd, NULL, NULL, TVS_FULLROWSELECT | TVS_HASBUTTONS | TVS_LINESATROOT |
TVS_HASLINES | TVS_EDITLABELS | TVS_DISABLEDRAGDROP| WS_CHILD | WS_VISIBLE |
TVS_SHOWSELALWAYS /* OPTIONAL */);
m_tree.SetImageList(m_images, TVSIL_NORMAL);
m_nTreeID = m_tree.GetDlgCtrlID();
}
LRESULT OnClickHandler(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/)
{
m_tree.SelectItem(NULL);
return 0;
}
}
... << RSDN@Home 1.1.3 stable >>