Проблеми с редактированием записи елемента Ctreeviewctrl.

  • Автор темы abdyla_v
  • Дата начала
A

abdyla_v

Гость
#1
Есть такая проблема : у меня есть елемент класса CtreeViewCtrl. Например я хочу редактировать запись в дереве. Я использую TVN_BEGINLABELEDIT и TVN_ENDLABELEDIT. Но все работает когда я например поминял содержимое записи на нажал левой мышей по окну(перевел фокус)! А мне нужно что бы запись менялась когда я нажимаю на Enter!
Также неработет и клавиша "Esc"!

Может кто сталкивался с такой проблемой помогоите разобратся!
 
M

mms

Гость
#2
During label editing, typically in response to the TVN_BEGINLABELEDIT notification message, you can get a pointer to the edit control used for label editing by using the GetEditControl member function. You can call the edit control's SetLimitText member function to limit the amount of text a user can enter or subclass the edit control to intercept and discard invalid characters. Note, however, that the edit control is displayed only after TVN_BEGINLABELEDIT is sent.

Взять едит контрол, на сообщение нажатия интер прекратить редактирование и применить изменения.
 
A

abdyla_v

Гость
#3
Взять едит контрол, на сообщение нажатия интер прекратить редактирование и применить изменения.
Нажатие "Enter" не работает! Тоисть НАПРИМЕР при отслеживания TVN_KEYDOWN - отслеживается при работе с амим деревом! А при изминение самой записи ни "Enter" ни "Esc" - не работает!
 
M

mms

Гость
#4
Нажатие "Enter" не работает! Тоисть НАПРИМЕР при отслеживания TVN_KEYDOWN - отслеживается при работе с амим деревом! А при изминение самой записи ни "Enter" ни "Esc" - не работает!
Отслеживать нажатие кнопки надо не для три контрола, а для эдит контрола (text box который появляется, для ввода лейбла).
 
A

abdyla_v

Гость
#5
Отслеживать нажатие кнопки надо не для три контрола, а для эдит контрола (text box который появляется, для ввода лейбла.
А как? С помощю Attach я хотел прикрепить текст-контрол к дереву чтобы отлавлевать сообщения но у меня не получилось! Может как то по другому?
 
M

mms

Гость
#6
Смотрим CTreeCtrl:

Call this function to retrieve the handle of the edit control being used to edit a tree view item's text.

CEdit* GetEditControl( ) const;
Далее смотрим CEdit:

Раздел: Input Message Handlers

OnKeyDown - Called when a nonsystem key is pressed.
Тебе бы не мешало почитать литературу, как работать с виндоуз контролами (в данном случае конкретно библиотека MFC, так же неплохо было бы понимать, как вообще устроены окошки в Win32API) ;), т.к. это самые азы, можно сказать, без которых ну никак ...
 
A

abdyla_v

Гость
#7
У меня есть клас моего окна унаследованый от CDialogImpl! В нём есть контрол типа CtreeViewCtrl. Это не MFC - это уже ATL и WTL. В MFC я знаю как зделать а вот в моем случаи как это организовать незнаю?
 
M

mms

Гость
#8
У меня есть клас моего окна унаследованый от CDialogImpl! В нём есть контрол типа CtreeViewCtrl. Это не MFC - это уже ATL и WTL. В MFC я знаю как зделать а вот в моем случаи как это организовать незнаю?
Там всё практически тоже самое, берём эдит контрол, отслеживаем нажатие интера у этого эдит контрола.
 
A

abdyla_v

Гость
#9
Там всё практически тоже самое, берём эдит контрол, отслеживаем нажатие интера у этого эдит контрола.
Как? Именно в этом и загвостка! Как словить сообщение? Каким образом?

Едит то у меня не задан - тоесь его ID. Он у меня появляется когда я пытаюсь что-то делать с елементом дерева. Как мне тогда составить карту сообщений - я думаю ни как? Может тут нужен другой подход?
 
M

mms

Гость
#10
С ивентами вообще работали?

CEdit есть? - есть. Не нужен никакой ID, у контрола есть специальный метод, чтобы получить этот едит.

Как получить ивент от CEdit? Выставить ему свой хэндлер (функцию) в OnKeyPress или что-то подобное.