русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Дочерние окна документов

Теперь рассмотрим HelloWndProc — оконную процедуру тех дочерних окон документов , которые выводят на экран фразу "Привет, мир!".

Как и для любого класса окна, который используется более , чем для одного окна , статические переменные, определенные в оконной процедуре (и в любой функции , вызываемой из оконной процедуры ), совместно используются всеми окнами , созданными на основе этого класса окна. Данные, уникальные для каждого окна , должны храниться в форме , отличной от статических переменных. Один из таких приемов подразумевает применение свойств окна. При другом подходе используется область памяти , зарезервированная путем определения отличного от нуля значения в поле cbWndExtra структуры WNDCLASSEX, используемой при регистрации класса окна.

Оконная процедура окна документа получает сообщение WM_MDIACTIVATE всегда, когда окно становится активным или перестает быть активным ( зависимости от того , содержится ли описатель окна в параметре lParam этого сообщения ). Вспомните, что в программе MDIDEMO имеется три различных меню: MdiMenuInit выводится, если нет ни одного окна документа, MdiMenuHello выводится, если активно окно документа Hello, и MdiMenuRect выводится , если активно окно документа с прямоугольниками .

Сообщение WM_MDIACTIVATE дает возможность окну документа изменить меню. Если в параметре lParam этого сообщения содержится описатель окна (окно становится активным), HelloWndProc изменяет меню на MdiMenuHello. Если в параметре lParam этого сообщения содержится описатель другого окна, HelloWndProc преобразует меню в MdiMenuInit.

HelloWndProc изменяет меню путем отправки сообщения WM_MDISETMENU окну - администратору. Окно - администратору обрабатывает это сообщение, удаляя список документов из текущего меню и присоединяя его к новому меню. Таким образом список документов попадает из меню MdiMenuInit (является результатом создания первого документа) в меню MdiMenuHello. Не используйте для изменения меню в приложении MDI функцию SetMenu.

Значения параметров wParam и lParam сообщения WM_MDIACTIVATE являются, соответственно, описателями окна , которое перестает быть активным, и окна, становящегося активным. Оконная процедура получает первое сообщение WM_MDIACTIVATE с параметром lParam равным описателю текущего окна , когда это окно впервые создается , а когда окно закрывается , она получает последнее сообщение WM_MDIACTIVATE с параметром lParam равным другому значению . Когда пользователь переключается с одного документа на другой, первое окно документа получает сообщение WM_MDIACTIVATE с параметром lParam равным описателю первого окна ( это время оконная процедура устанавливает меню в MdiMenuInit). Второе окно документа получает сообщение WM_MDIACTIVATE с параметром wParam равным описателю второго окна (это время оконная процедура устанавливает меню либо в MdiMenuHello, либо в MdiMenuRect, в зависимости от описателя). При закрытии всех окон документов остается только меню MdiMenuInit. Вспомните, что FrameWndProc посылает дочернему окну асинхронное сообщение WM_QUERYENDSESSION, когда пользователь выбирает в меню опцию Close или Close All. HelloWndProc обрабатывает сообщения WM_QUERYENDSESSION и WM_CLOSE, выводя на экран окно сообщений с запросом пользователю о том, можно ли закрывать окно . ( реальной программе в этом окне сообщений может появляться запрос о том , нужно ли сохранять файл .) Если пользователь выбирает опцию , соответствующую тому , что окно закрывать не следует , оконная процедура возвращает 0.

Все необрабатываемые сообщения должны передаваться в DefMDIChildProc (не в DefWindowProc) для их обработки по умолчанию. Некоторые сообщения должны быть переданы в DefMDIChildProc независимо от того, обрабатываются ли они как - в оконной процедуре или нет . Такими сообщениями являются:

WM_CHILDACTIVATE, WM_GETMINMAXINFO, WM_MOVE, WM_SETFOCUS, WM_SIZE, WM_MENUCHAR и WM_SYSCOMMAND.

RectWndProc почти полностью аналогична HelloWndProc, поэтому нет смысла ее специально рассматривать.

Просмотров: 455


Вернуться в оглавление



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.