• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

abdyla_v

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

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

mms

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

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

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

mms

Нажатие "Enter" не работает! Тоисть НАПРИМЕР при отслеживания TVN_KEYDOWN - отслеживается при работе с амим деревом! А при изминение самой записи ни "Enter" ни "Esc" - не работает!

Отслеживать нажатие кнопки надо не для три контрола, а для эдит контрола (text box который появляется, для ввода лейбла).
 
A

abdyla_v

Отслеживать нажатие кнопки надо не для три контрола, а для эдит контрола (text box который появляется, для ввода лейбла.

А как? С помощю Attach я хотел прикрепить текст-контрол к дереву чтобы отлавлевать сообщения но у меня не получилось! Может как то по другому?
 
M

mms

Смотрим 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

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

mms

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

Там всё практически тоже самое, берём эдит контрол, отслеживаем нажатие интера у этого эдит контрола.
 
A

abdyla_v

Там всё практически тоже самое, берём эдит контрол, отслеживаем нажатие интера у этого эдит контрола.

Как? Именно в этом и загвостка! Как словить сообщение? Каким образом?

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

mms

С ивентами вообще работали?

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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!