Применение Windows API
Шрифт:
Объекты — "Контроллеры" создаются при обработке сообщения WM_CREATE или, в случае диалоговых окон, сообщением WM_INITDIALOG. При этом выполняются конструкторы элементов управления, внедренных в эти "Контроллеры".
Базовым классом для большинства элементов управления является SimpleControl. Он получает и сохраняет дескриптор окна специфического элемента управления. Чтобы получить этот дескриптор, необходимо иметь дескриптор родительского окна и идентификатор элемента управления.
Ниже
Здесь показано, как элемент управления редактированим может использоваться:
Далее:
Использование «Контроллера» в диалоге
Перевод А. И. Легалова
Англоязычный оригинал находится на сервере компании Reliable Software
Основное окно программы не должно быть универсальным окном, изменяющим свой размер. Много небольших приложений работают лучше в формате диалогового окна. Очевидное преимущество такого подхода заключается в том, что, для размещения элементов управления на поверхности диалога, можно использовать редактор ресурсов. Таким образом реализован пользовательский интерфейс (ПИ) частотного анализатора. Ниже этот полезный подход описан подробнее. Вы можете разгрузить исходный текст простого приложения, которое демонстрирует, описанные методы (любезность Laszlo Radanyi).
Прежде всего мы должны разработать диалоговое окно, используя редактор ресурсов. Мы назначаем идентификаторы всем элементам управления и непосредственно диалогу. В данном примере ресурс диалога имеет идентификатор DLG_MAIN. В процедуре WinMain мы не можем регистрировать окна любого класса, потому что Windows имеет предопределенный класс для диалоговых окон. Вместо того, чтобы создавать окно, мы вызываем функцию CreateDialog, передавая ей указатель на нашу собственную процедуру диалога (объясню позже).
Цикл сообщений данной программы является нестандартным, так как он вызывает функцию IsDialogMessage для каждого сообщения. Эта функция API не только проверяет, направлено ли данное сообщение к диалоговому окну, но и, что более важно, пересылает это сообщение процедуре диалога. Если сообщение не было адресовано диалогу, мы выполняем стандартную трансляцию и диспетчеризацию.
Для удобства, мы храним значение HINSTANCE в глобальной переменной. Этот вариант фактически является предшественником более общего объекта — Приложения. Однако, в данном случае, пример слишком тривиальный, чтобы заслуживать собственного класса.