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

 

 

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

 

 

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

 

 

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

 

 

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

 

 

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

 

 

Значения параметров wParam и lParam сообщения WM_MDIACTIVATE являются, соответственно, описателями окна , которое перестает быть активным, и окна, становящегося активным. Оконная


– 97 –

 

 

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

 

 

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

 

 

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

 

 

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

 

 








Дата добавления: 2016-11-22; просмотров: 534;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.