Label Editing в CTreeCtrl
От: moodwin  
Дата: 30.11.04 18:13
Оценка:
Помогите, пожалуйста, решить следующую проблему.
Используется VisualStudio 7.0, C++.
1) Создаю обычный модальный диалог, добавляю на него CTreeView.
Мне нужно, чтобы пользователь мог редактировать метки на узлах дерева.
Добавляю обработчик события EndLabelEdit, пишу туда код, запускаю. Обнаруживается следующий косяк: пользователь нормально начинает редактировать метку, но когда нажимает Enter, событие почему-то обрабатывается диалогом и происходит выход. Естественно, кнопку "OK", созданную визардом и весь код к ней я давно удалил.
Спрашивается, как по-нормальному избежать обработки Enter'a самим диалогом?
2) Переопределяю метод onOK в своем диалоге, ничего там не делаю. Диалог перестал закрываться по Enter, однако такой способ кажется мне извратом. ВОзникла следующая проблема: пользователь нормально редактирует метку, но когда нажимает Enter, ничего не происходит. Событие EndLabelEdit не вызывается.
Подскажите, пожалуйста, что я делаю не так. Если есть возможность, поделитесь примером.
Заранее благодарен.
Re: Label Editing в CTreeCtrl
От: Patalog Россия  
Дата: 30.11.04 19:37
Оценка:
Здравствуйте, moodwin, Вы писали:

хъ

См. PreTranslateMessage. Если hwnd сообщения есть твой CTreeView то возвращай TRUE не передавая обработку дальше.
Почетный кавалер ордена Совка.
Re: Label Editing в CTreeCtrl
От: Кирпа В.А. Украина  
Дата: 02.12.04 14:00
Оценка:
Здравствуйте, moodwin, Вы писали:

M>Помогите, пожалуйста, решить следующую проблему.

M>Используется VisualStudio 7.0, C++.
M>1) Создаю обычный модальный диалог, добавляю на него CTreeView.
M>Мне нужно, чтобы пользователь мог редактировать метки на узлах дерева.
M>Добавляю обработчик события EndLabelEdit, пишу туда код, запускаю. Обнаруживается следующий косяк: пользователь нормально начинает редактировать метку, но когда нажимает Enter, событие почему-то обрабатывается диалогом и происходит выход. Естественно, кнопку "OK", созданную визардом и весь код к ней я давно удалил.
M>Спрашивается, как по-нормальному избежать обработки Enter'a самим диалогом?
M>2) Переопределяю метод onOK в своем диалоге, ничего там не делаю. Диалог перестал закрываться по Enter, однако такой способ кажется мне извратом. ВОзникла следующая проблема: пользователь нормально редактирует метку, но когда нажимает Enter, ничего не происходит. Событие EndLabelEdit не вызывается.
M>Подскажите, пожалуйста, что я делаю не так. Если есть возможность, поделитесь примером.
M>Заранее благодарен.

Я бы предложил такой обработчик


void MyDialog::OnOk()
{
    if (m_Tree.GetEditControl() != NULL)
    {
        m_Tree.SetFocus();
        return;
    }
    CDialog::OnOk();
}
!0xDEAD
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.