15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Возможность редактирования текста элемента

Для получения возможности редактирования текста, дерево должно быть создано с флагом TVS_EDITLABELS. Его можно установить в редакторе ресурсов, при вызове функции Create() или PreCreateWindow(), если Вы используете CTreeView класс.
Затем Вы должны перехватить и обработать сообщения TVN_BEGINLABELEDIT и TVN_ENDLABELEDIT. По правде говоря, никакой необходимости нет перехватывать TVN_BEGINLABELEDIT, но таким методом можно ограничить длину текста, вводимого пользвателем.


void COutline::OnBeginLabelEdit(NMHDR* pNMHDR, LRESULT* pResult) 
{
 TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
 // Устанавливаем лимит в 127 символов
  GetEditControl()->LimitText(127);

 *pResult = 0;
}

Наиглавнейшей идеей в этой статье, стал перехват TVN_ENDLABELEDIT сообщения, которое позволяет нам обновлять внутренние структуры данных, которые использует элемент управления. Ввод следующих строк необходим для того, чтобы после конца редактирования обновления вступали в силу, если же этого не сделать, то строка вернется к исходному значению.


void COutline::OnEndLabelEdit(NMHDR* pNMHDR, LRESULT* pResult) 
{
 //Устанавливаем result в TRUE для принятия изменений 
 *pResult = TRUE;
}

 

Источник: ProtoSphere