Уроки Iczelion'а




Урок 32. Создание MDI-приложения - часть 6


Эта проблема как раз то, что призвана решить функция CreateMDIWindow. Она создает отдельный тред для каждого из дочерних MDI-окон, поэтому если одно из них занято, оно не приводит к зависанию всего приложения.

Необходимо сказать несколько слов относительно оконной процедуры дочернего MDI-окна. Как и в случае с фреймовым окном, вы не должны вызывать DefWindowProc, чтобы обработать необрабатываемые вашим приложением сообщением. Вместо этого вы должны использовать DefMDIChildProc. У этой функции точно такие же параметры, как и у DefWindowProc.

Кроме WM_MDICREATE, есть еще несколько сообщений, относящихся к MDI-окнам.

Я приведу их описание:

  • WM_MDIACTIVATE - это сообщение может быть послано приложением клиентскому окну, чтобы последнее активировало выбранное дочернее MDI-окно. Когда клиентское окно получает сообщение, оно активирует выбранное дочернее MDI-окно, а также посылает это же сообщение окну, которое было активированы или дезактивировано. Таким образом, данное сообщение имеет двойное назначение: с его помощью приложение может активировать выбранное дочернее окно, а также оно может быть использовано дочерним MDI-приложением для определения того, активировано оно или нет. Например, если каждое дочернее MDI-окно имеет различно меню, оно может использовать эту возможность для изменения меню фреймового окна при активации/дезактивации.
  • WM_MDICASCADE, WM_MDITILE, WM_MDICONARRANGE - эти сообщения отвечаю за расположение дочерних MDI-окон. Hапример, если вы хотите, чтобы дочерние MDI-окна pасположились каскадом, пошлите сообщение WM_MDICASCADE клиентскому окну.
  • WM_MDIDESTROY - пошлите это сообщение клиентскому окну, если хотите уничтожить дочернее MDI_окно. Вам следует использовать это сообщение вместо DestroyWindow, потому что если дочернее MDI-приложение максимизировано, это сообщение восстановить заголовок фреймового окна, что не будет сделано в случае применения функции DestroyWindow.
  • WM_MDIGETACTIVE - используйте это сообщение, чтобы получить хэндл активного в настоящий момент дочернего MDI-окна.



  • Содержание  Назад  Вперед