Здравствуйте, <Аноним>, Вы писали:
А>Если элементов в контроле нет или нет выделенных, 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 >>