Дочерние окна
PassWord[]. Но этого все же можно добиться, если при создании дочернего окна использовать флаг ES__MULTILINE. Флаг указывает, что будет вводиться текст из нескольких строчек. Действительно, при этом каждое нажатие клавиши Enter приводит к посылке извещения ENMAXTEXT. Но разработчик оконного класса разумно решил, что пароль многострочным не бывает, поэтому включение флага ES_MULTILINE приводит к игнорированию функцией CreateWindowEx() флага ESPASSWORD. В результате вместо пароля вводится обычная строка с эхо-отображением.
Самый поверхностный анализ функции OnChldO показывает, что ее можно упростить, если удалить обработку извещения EN_MAXTEXT и уничтожать дочерние окна сразу после получения строки PassWord[]. Так я ее вначале и написал. Как вы думаете, сколько еще времени мне потребовалось затратить, чтобы понять, почему не работает программа?
Рассмотренный пример позволяет сделать несколько выводов. Во-первых, следует учитывать, что различные дополнения к базовому интерфейсу операционной системы позволяют значительно сократить текст программы. Во-вторых, следует помнить, что полученное решение может несколько отличаться от того, которое нужно разработчику. Но если разработчик упорствует в своем видении приложения, то затраты времени на изучение и проверку всех нюансов работы используемой библиотеки могут быть больше, чем при самостоятельной реализации требуемой функции. Поэтому при обилии самых разнообразных библиотек еще можно встретить программиста, специализирующегося на определенной предметной области и годами накапливающего удобное для себя окружение, несмотря на то что оно во многом дублирует возможности существующих коммерческих продуктов.
Диалоговые окна Типы диалогов Рассмотренные выше графические управляющие элементы чаще всего размещают в диалоговом окне. Вызовы Сгеа1е1лМ пс1см() для управляющих элементов в этом случае выполняются функцией вывода диалогового окна автоматически. Пример диалогового окна с двумя кнопками, создаваемого в проекте Р1дМш, показан на рис. 7.1.