gloomyraven Зачем изобретать велосипед? Диалог - есть окно. Класс этого окна регистрируется виндой и содержит кучу немаловажных фишек, от которых Вы намеренно отказываетесь изобретая свой класс диалога. Указываем на WndProc, который не обрабатывает WM_CREATE. А кто будет контролы создавать, если Вы уже лишили винду этого права? Раз уж так хочется надругаться над диалогами в Win32, делайте это до конца, т.е. обрабатывайте сами все сообщения как это сделал бы обработчик стандартного класса диалога.
gloomyraven Если это можно назвать обработкой: Код (Text): .IF uMsg==WM_CREATE ; записываем значение TimeOut в EDIT .ELSEIF uMsg==WM_COMMAND В догонку к моему предыдущему сообщению: Контролы в шаблоне создаются в том порядке, в котором они обьявлены. Так что можете переместить все статики в начало шаблона, чтоб они гарантированно присутствовали когда прийдёт первый EN_UPDATE.
да помоему лучше сохраньть все хэндэлы .IF uMsg==WM_CREATE ;вот тут invoke GetDlgItem,hWnd,IDC_lbl_Error invoke ShowWindow,eax,FALSE .ELSEIF и тамже его скрыть
gloomyraven Вот я тоже удивляюсь, что винда разрулила такой безграмотный код. Для того чтобы обойти стандарты винды, нужно учесть кучу тонкостей, о которых Вы пока ещё не знаете. readme Только не в WM_CREATE, а в WM_INITDIALOG, который гарантированно приходит после того как все дочерние контролы уже созданы.
Quantum - это недописаный код =))) readme Ты хочешь сказать, что EN_UPDATE для контрола EDIT приходит раньше (!!!), чем он создается?
gloomyraven EN_UPDATE посылает edit и это происходит раньше чем создастся статик. См. моё сообщение за "Дата: Май 17, 2006 01:42:17".
Quantum Дак ведь это уже не диалоговое окно, а обычное, созданное на основе диалогового (блин, масло-масленное) и WM_INITDIALOG не должен приходить. Насчет безграмотного кода: где его безграмотность? В том, что я "копирую" станд. диалог и создаю свой?
readme Я уже наступал на эти грабли (пытался обратиться к контролу раньше его создания). Вот я всё запутал... Но, думаю, твой вариант подходит.
gloomyraven Она находит первый статик потому что он в шаблоне стоит первый, до edit. Он и не придёт. Я же говорил, что в диалогах много полезных фишек, от которых жалко отказываться. А чем поможет получение хендлов через WM_CREATE/WM_INITDIALOG, если EN_UPDATE всё равно придёт раньше? Причём WM_CREATE придёт ещё раньше, когда дочерних контролов ещё и в помине нет. Единственный вариант: изменить последовательность строчек в шаблоне. В том, что влечёт за собой столько граблей.
Все, я решил проблему: 1. WM_CREATE на фиг не нужен 2. сохранять хэндлы надо ПОСЛЕ создания окна и ДО цикла сообщений (в WinMain), там же, где инициализируется PROGRESSBAR, т.к. именно в этом месте все контролы будут уже созданы Quantum Грабли оказались в том, что "WM_INITDIALOG" теперь "неофициально" находится между "ПОСЛЕ" и "ДО" (в WinMain) Других ограничений я не вижу СПАСИБО ОГРОМНОЕ ВСЕМ, что помогли разобраться!!! =)
gloomyraven Хотя я и предлагал более простой вариант, без сохранения хендлов, должен признать, что решение оригинальное. Кстати, WM_INITDIALOG скорее всего посылает CreateDialogParam, но он не может его послать, т.к. не знает адрес процедуры обработчика (там ноль вообще). До сих пор не могу понять зачем было создавать свой класс диалога.
Quantum =) Я сторонник "нестандартного" программирования (или, как скажут некоторые, через ж...) Т.о. лучьше вникаешь в тонкости программирования, ИМХО. Доброй ночи.