Сообщение WM_INITDIALOG  в диалоговых окнах


Система не отправляет сообщение WM_CREATE процедуре диалогового окна. Вместо него, когда создает диалоговое окно, она отправляет сообщение WM_INITDIALOG, как и всем его органам управления, но перед этим она показывает диалоговое окно на экране. Процедура должна выполнить любой инициализационный запрос, гарантируя то, что диалоговое окно показывает на экране текущие параметры, связанные с задачей. Например, когда диалоговое окно содержит орган управления, который показывает текущие диск и каталог, процедура должна установить текущий диск и каталог и задать в органе управления эти значения.

Процедура может инициализировать органы управления при помощи использования таких функций, как SetDlgItemText и CheckDlgButton. Поскольку органы управления - тоже окна, процедура может также манипулировать ими и при помощи использования функций управления окном, такими как EnableWindow и SetFocus. Процедура может извлечь дескриптор окна органа управления, используя функцию GetDlgItem.

Процедура диалогового окна может изменить, когда это необходимо, содержимое, состояние и расположение любого органа управления. Например, в диалоговом окне, которое содержит список имен файлов и кнопку Отрыть (Open), процедура может заблокировать кнопку Открыть до тех пор, пока пользователь не выберет файл из списка. В этом случае шаблон диалогового окна определяет для кнопки Открыть (Open) стиль WS_DISABLED, а система автоматически блокирует кнопку, когда создает ее. Когда процедура диалогового окна принимает уведомительное сообщение от окна со списком, которое указывает, что пользователь выбрал файл, она вызывает функцию EnableWindow, которая разрешает работу кнопки Открыть (Open).

Чтобы показать на экране пользовательский значок на панели заголовка диалогового окна, ваш обработчик сообщения WM_INITDIALOG может отправить сообщение WM_SETICON блоку диалога.

Если прикладная программа создает диалоговое окно при помощи одной из функций DialogBoxParam, DialogBoxIndirectParam, CreateDialogParam или CreateDialogIndirectParam, параметр lParam сообщения WM_INITDIALOG содержит дополнительный параметр, передаваемый в функцию. Приложения обычно используют этот дополнительный параметр, чтобы передать указатель на дополнительную инициализационную информацию в процедуру диалогового окна, однако процедура блока диалога должна определить значение этого параметра. Если прикладная программа использует другую функцию для создания диалогового окна, система устанавливает параметр lParam в значение ПУСТО (NULL).

Перед возвращением значения сообщения WM_INITDIALOG, процедура должна определить, должна ли она устанавливать фокус ввода данных для заданного органа управления. Если процедура диалогового окна возвращает значение ИСТИНА (TRUE), система автоматически устанавливает фокус ввода данных в органе управления, дескриптор окна которого в параметре wParam. Если органу управления не свойственен принятый по умолчанию фокус, он может установить фокус в органе управления, которому это свойственно, используя функцию SetFocus. Если процедура устанавливает фокус ввода данных, то она должна возвратить значение ЛОЖЬ (FALSE), чтобы предотвратить установку фокуса системой по умолчанию. По умолчанию, фокус ввода данных всегда получает тот орган управления, который задается первым в шаблоне, который видимый, не заблокированный и имеет стиль WS_TABSTOP. Если такого элемента управления не существует, система по умолчанию устанавливает фокус ввода данных в первый орган управления в шаблоне.

Назад в оглавление
На главную страницу

Hosted by uCoz