|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||||||||||||||||||||||||||||||||||||||||||||||
Процедура обработки дочернего окна (ListView и Edit)24.04.2013, 18:07. Показов 6671. Ответов 19
Метки нет (Все метки)
Для начала в кратце опишу что есть в моём проэкте.
1.Обработчик "главного окна":
-РАБОТАЕТ ( почти, за исключением небольшой непонятной мне фичи, ловлю
Ладно, это отход от того что меня сейчас намного больше интересует. Теперь ближе к сути: Я создал в меню несколько полей и привязал Диалоги к ним. В одном из диалогов опять же есть форма ListView и так же создаётся EditBox на ней, и естественно опять же пишу новый обработчик к полю ввода. По какой то причине возникает следующяя ситуация: При двойном клике - создаётся(от координат мыши) EditBox, рисуется правильно. Далее я ввожу данные в появившееся поле ввода и нажимаю Enter, т.к. по задумке - после нажатия этой клавиши происходит сохранение результата, но однако нажатие Enter мне выводит сообщение о том, что окно не найдено или потеряно(если раскомментить строку if hEdit.. != NULL, то окажется что окна не существует, т.е. это он его не видит, но на самом деле оно есть! Я не знаю чего я курил, но почему в основном окне обработчик работает, а в тут нет? - ведь я просто копировал обработчик, и изменения которые вносил - не могли повлиять на выход такой странной ошибки. Возможно разгадка кроется в каких то полях, которые нужно переименовать (имеется ввиду hDlg или uMsg)... Вот часть кода обработки и создания окна:
Добавлено через 1 час 56 минут Ещё поковырялся, и немного продвинулся, хотя непонятно куда =) Поменял немного код в обработчике, при этом происходят следующие события: 1. Т.к. определено
Если же закоментировать строку :
Ну же я чувствую разгадка уже близко, помогите ^ ^
0
|
||||||||||||||||||||||||||||||||||||||||||||||
| 24.04.2013, 18:07 | |
|
Ответы с готовыми решениями:
19
ListView дочернего окна У дочернего окна не доступен Edit Вставить текстовые данные в Edit дочернего окна стороннего приложения |
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 07.05.2013, 14:05 [ТС] | |
|
До сих пор актуально, дайте хотяб зацепку... А то я даже не знаю на что подумать... Ведь в главном окне всё(почти) пучком, а в дочернем окне - нет =(
0
|
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||||||||||||||||||||||||||||||
| 13.05.2013, 07:50 [ТС] | |||||||||||||||||||||||||||||||
|
Прближение было найдено, однако ещё не понятно как решить теперь задачу.
Стандартный обработчик в IntMain я заменил так:
Может кто скажет как преодолеть данный барьер, т.к. я конешно пойду читать что такое IsDialogMessage... но боюсь не осилю до конца, т.к. точно мсдн пока что не могу перевести... Добавлено через 21 минуту Походу я понял =)
Добавлено через 33 минуты
![]() Добавлено через 39 минут
Где hDadd - является дескриптором родительского меню (не основного, а открытого из меню). Добавлено через 12 минут ... Может какие то флажки нужно включить в самом диалоговом окне, в котором расположен EditBox?... Я создавал его просто New Dialog и менял там только название окна... Добавлено через 9 часов 59 минут Модифицировал обработчик, дабы понять где проблема...
0
|
|||||||||||||||||||||||||||||||
|
Супер-модератор
|
|
| 13.05.2013, 08:25 | |
|
Если б ты собрал минимальное приложение (но полностью, а не по кусочкам!!!), иллюстрирующее проблему, давно бы ее уже нашли. Мне, скажем, просто лень собирать всё, что здесь написано в один проект, да еще и догадываться, как ты связал то, о чем тут не упомянул, поэтому даже читать не стал это всё. Будет код, который можно откомпилировать, запустить и увидеть проблему - посмотрю...
0
|
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 13.05.2013, 08:33 [ТС] | |
|
Возможно проблема в не правильном вызове функции SetWindowLong...
Я на сколько понимаю МСДН, то существуют 2 флага обработки(субклассинга) - GWL_WNDPROC и DWL_DLGPROC. Диалог, на котором создан ListView и EditBox - я понимаю что для него (если бы надо было) нужно было бы пользоваться DWL_DLGPROC... Но ведь у меня окно на диалоге, и тогда получается нужно пользоваться GWL_WNDPROC ?... Или нужно совместить? ~ ~ В инете к сожалению на WinApi флаг DWL_DLGPROC очень мало не то что примеров, а даже просто информации...
0
|
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 13.05.2013, 10:50 [ТС] | |
|
Выкладываю проэкт, скомпилирован на VC++ 2005
0
|
|
|
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
|
||||||
| 13.05.2013, 13:36 | ||||||
|
для начала
1
|
||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||||||||||||||||||||
| 13.05.2013, 15:02 [ТС] | |||||||||||||||||||||
|
ssXXss, спасибо! Ваш совет по использованию этого СУПЕРСКОГО метода на главную страницу бы вывесить, я раньше и не знал что такое есть... (уже скопировал себе все страницы ошибок кодов на комп в ворд, считаю каждый должен иметь).
Но всё же моя проблема осталась актуальной, т.к. углубляться в синтаксис использования данного метода только предстоит. Кстати уже нашёл какую то странность:
Ладно, пойду дальше искать ошибки, кровь из носу, нужно исправить баг. Кстати, а что же вы не описали в статье решение данной проблемы с исп. KILLFOCUS ? Я так понимаю решение - брать все активные окна и перебирать их на нужность их присутствия.. и наверно делать это надо каждый раз, когда пользователь что то делает (двигает мышкой ли, нажимает на клавиши..)(естественно пока приложение активно). Добавлено через 15 минут
Добавлено через 2 минуты Думал, думал над тем что сказал, у увидел "GetDlgItemText" - так тут же DLG, значит сабклассинг надо через DWL_DLGPROC флаг делать, правда я уже пробовал, но не помогло, пойду дальше пробовать)))
0
|
|||||||||||||||||||||
|
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
|
|
| 13.05.2013, 17:13 | |
|
мне чужой славы не надо )) статья не моя, просто как то сам столкнулся почти с подобным и сохранилась ссылка.
0
|
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||
| 14.05.2013, 13:48 [ТС] | ||
|
Добавлено через 18 часов 34 минуты Может всё же кто то подскажет, файл выложен в посте № 6. Из кода - работа LV с эдитом (эдит появляется после двойного щелчка на строке в текущем положении курсора) в основном окне - нормальная, обрабатывается как WM_KILLFOCUS, так и при вводе символов и нажатии ENTER - выводится окошко с введёнными символами. Проблема в LV из меню... там хоть эдит и появляется, и вводятся туда данные, но они не сохраняются. KILLFOCUS глючит... Ну что тут нет никого кто мог бы помочь?...
0
|
||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 16.05.2013, 15:44 [ТС] | |
|
До сих пор актуально и тишина =)
П.С. надеюсь поднимая топик я не нарушаю никаких правил пользования форумом...
0
|
|
|
Супер-модератор
|
|||||||
| 17.05.2013, 14:10 | |||||||
0
|
|||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||||||||||||
| 17.05.2013, 15:21 [ТС] | ||||||||||||
0
|
||||||||||||
|
Супер-модератор
|
||||||||||||||||||
| 17.05.2013, 16:36 | ||||||||||||||||||
Это была первая ошибка. Вторая: в момент обработки WM_GETDLGCODE внутри
0
|
||||||||||||||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||
| 18.05.2013, 15:45 [ТС] | ||
Мессаги выводились и с hwap хзндлом. Теперь поменял как ты сказал глобальну переменную hDadd на hDaddTest - и вообще ничего не работает. ~ ~ Эдит окно создаётся, но не реагирует по AddProc на нажатие Enter и Esc, а обрабатывает как стандартный обработчик, после нажатия Enter - окно просто исчезает... А Esc - выходит из Диалогового окна вообще. Я не понимаю что ты мне написал, стало помоему ещё хуже ~ ~ Добавлено через 9 минут Заменил в процедуре обработки hwap на hDaddTest - процедура опять заработала, но куча ERROR, и текст так и не вывелся =(
0
|
||
|
Супер-модератор
|
|
| 18.05.2013, 15:51 | |
|
VS не держу, компилировал в Code::Blocks, заодно сделал Юникодный проект, вот результат:
subclass_example.zip Что на этот раз не так?
0
|
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 18.05.2013, 21:43 [ТС] | |
|
У вас то я смотрю всё работает =) А вот у меня почему то нет... Ругается на 1421 ошибку через ERROR, типа неправильный ид там ID_LISTOPADD... Но компилятор не ругается.
Что то я не так сделал как вы сказали... Сейчас буду разбираться... И кстати, я что то не понял, а к чему вы сказали что "hwap" не канает, а сами же его оставили)))
0
|
|
|
Супер-модератор
|
||
| 19.05.2013, 02:38 | ||
|
0
|
||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||
| 19.05.2013, 06:55 [ТС] | |||
|
Так что же такое hwap? Хэндл процедуры? Или что то другое?...
Вообще спасибо что помог... "С горем пополам" как говорится))) Но всё же я особо не понял что именно произошло... А по хорошему именно "детали" и являются первопричиной, до которой всё же хочется докопаться, т.к. результат работы программы хоть и хорошо, но не главное, т.к. работает временно... В следующий раз опять сделаю ошибку, т.к. сути то я и не уловил) И ещё, я что то не догнал фразу:
Вообще, конешно програминг это очень занимательно, но очень многое в этом деле ну просто приходится "как об стену лбом" и либо нужен хороший лектор, который разжуёт с азов, либо надеяться на удачу - что не разумно. Добавлено через 5 минут
Я правильно разсуждаю? =)
0
|
|||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||||||||||
| 26.03.2014, 14:40 [ТС] | |||||||||||
|
Так, предыдущие ньюансы были решены. Всем спасибо за помощь. Пришло время идти дальше в теме сабклассинга.
На этот раз я решил оптимизировать сабклассированную процедуру, т.к. элементов для сабклассирования очень много, то решил сделать одну функцию для сабклассинга всех элементов, но возникла пара вопросов. 1. Если я буду сабклассировать несколько разных элементов(например EditBox и ComboBox), то ни чего страшного не произойдёт, если я впишу все Case которые нужны для каждого типа элементов?(т.е. в одной процедуре будут и EN_CHANGE и CBN_SELCHANGE) 2. Т.к. я буду описывать все notify, то я так понимаю что ежели мне не понадобится изменять стандартую обработку, а в коде будет этот case, то он выполнится, а стандартной - не будет.
0
|
|||||||||||
| 26.03.2014, 14:40 | |
|
Помогаю со студенческими работами здесь
20
Оконная процедура дочернего окна - обработчик кнопки "Close" не работает Как получить размеры клиентской области окна-родителя в функции дочернего окна? При открытии дочернего окна, отображаются формы и кнопки с основного окна; как исправить? Позиционирование дочернего окна относительно элемента главного окна
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|