Редактирование CTreeCtrl в диалоге
От: Аноним  
Дата: 27.04.02 06:01
Оценка:
Требуется редактировать элементы дерева в модальном диалоге, но при нажатии на Enter диалог закрывается :(

Пробовал лечить при помощи PreTranslateMessage, но получилось что-то не то:
редактируемый текст после нажатия изменяется на первоначальный. Как это можно исправить?
Re: Редактирование CTreeCtrl в диалоге
От: OlegO Россия http://www.mediachase.ru
Дата: 27.04.02 06:11
Оценка:
Здравствуйте Аноним, Вы писали:


А>Требуется редактировать элементы дерева в модальном диалоге, но при нажатии на Enter диалог закрывается


А>Пробовал лечить при помощи PreTranslateMessage, но получилось что-то не то:

А>редактируемый текст после нажатия изменяется на первоначальный. Как это можно исправить?

Перехватить событие

TVN_ENDLABELEDIT

В обработчике если данные корректны, то
*pResult = 1 иначе отмена *pResult = 0

void CXXXDlg::OnEndlabeleditTree(NMHDR* pNMHDR, LRESULT* pResult) 
{
        TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR; // Содержит новые данные

        *pResult = 1;
}
С уважением, OlegO.
Re[2]: Редактирование CTreeCtrl в диалоге
От: Аноним  
Дата: 27.04.02 06:42
Оценка:
Здравствуйте OlegO, Вы писали:

OO>Здравствуйте Аноним, Вы писали:




OO>Перехватить событие


OO>TVN_ENDLABELEDIT


OO>В обработчике если данные корректны, то

OO>*pResult = 1 иначе отмена *pResult = 0

OO>
OO>void CXXXDlg::OnEndlabeleditTree(NMHDR* pNMHDR, LRESULT* pResult) 
OO>{
OO>        TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR; // Содержит новые данные

OO>        *pResult = 1;
OO>}
OO>

Уже додумался, кстати его еще и полылать при этом надо самому
из PreTranslateMessage :)

Но все равно спасибо, :))
Re: Редактирование CTreeCtrl в диалоге
От: Кирпа В.А. Украина  
Дата: 27.04.02 06:46
Оценка:
Здравствуйте Аноним, Вы писали:


А>Требуется редактировать элементы дерева в модальном диалоге, но при нажатии на Enter диалог закрывается


А>Пробовал лечить при помощи PreTranslateMessage, но получилось что-то не то:

А>редактируемый текст после нажатия изменяется на первоначальный. Как это можно исправить?

В OnOk()

сделай так


void MyClass::OnOk()
{
    if (m_Tree.GetEditControl() != NULL)
    {
        m_Tree.SetFocus();
        return;
    }   
    CDialog::OnOk();
}


!0xDEAD
Re[3]: Редактирование CTreeCtrl в диалоге
От: OlegO Россия http://www.mediachase.ru
Дата: 27.04.02 07:01
Оценка:
Здравствуйте Аноним, Вы писали:

А>Уже додумался, кстати его еще и полылать при этом надо самому

А>из PreTranslateMessage

Странно он у меня прекрасно в ON_NOTIFY(TVN_ENDLABELEDIT, IDC_ююю, ююю) ловится
С уважением, OlegO.
Re[4]: Редактирование CTreeCtrl в диалоге
От: Аноним  
Дата: 27.04.02 07:28
Оценка:
Здравствуйте OlegO, Вы писали:

OO>Здравствуйте Аноним, Вы писали:


А>>Уже додумался, кстати его еще и полылать при этом надо самому

А>>из PreTranslateMessage :)

OO>Странно он у меня прекрасно в ON_NOTIFY(TVN_ENDLABELEDIT, IDC_ююю, ююю) ловится :???:


В диалоге?
Имхо у диалога система сама обрабатывает сообщения, то есть WindowProc "отсутствует"
Re[2]: Редактирование CTreeCtrl в диалоге
От: Виталий Россия  
Дата: 27.04.02 07:51
Оценка:
Здравствуйте Кирпа В.А., Вы писали:

КВ>Здравствуйте Аноним, Вы писали:



А>>Требуется редактировать элементы дерева в модальном диалоге, но при нажатии на Enter диалог закрывается


А>>Пробовал лечить при помощи PreTranslateMessage, но получилось что-то не то:

А>>редактируемый текст после нажатия изменяется на первоначальный. Как это можно исправить?

КВ>В OnOk()

OnOK

КВ>сделай так



КВ>
КВ>void MyClass::OnOk()
КВ>{
КВ>    if (m_Tree.GetEditControl() != NULL)
КВ>    {
КВ>        m_Tree.SetFocus();
КВ>        return;
КВ>    }   
КВ>    CDialog::OnOk();
КВ>}
КВ>


С таким вариантом пользователь не сможет отменить редактирование, лучше обрабатывать и OnCancle или так:

BOOL CWallerDlg::PreTranslateMessage(MSG* pMsg) 
{
    // TODO: Add your specialized code here and/or call the base class
    if (pMsg->message == WM_KEYDOWN && 
         (pMsg->wParam==VK_RETURN || pMsg->wParam==VK_ESCAPE))
    {
        m_tree.SetFocus();
        return true;
    }    
    return CDialog::PreTranslateMessage(pMsg);
}

КВ>


Приятного времени суток
Re: Редактирование CTreeCtrl в диалоге
От: Аноним  
Дата: 27.04.02 16:59
Оценка:
Здравствуйте Аноним, Вы писали:


А>Требуется редактировать элементы дерева в модальном диалоге, но при нажатии на Enter диалог закрывается :(


А>Пробовал лечить при помощи PreTranslateMessage, но получилось что-то не то:

А>редактируемый текст после нажатия изменяется на первоначальный. Как это можно исправить?

Прекрой OnOK и не вызывай родителя
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.