Пользовательские шаблоны для стиля Проводника
Чтобы определить дополнительные органы управления для диалогового окна Открыть (Open) или Сохранить как (Save As) в стиле Проводника, используйте структуру OPENFILENAME, задавая шаблон для дочернего диалогового окна, которое содержит дополнительные средства управления. Если ваш шаблон дочернего блока диалога - ресурс в прикладной программе или динамически подключаемой библиотеке, установите флажок OFN_ENABLETEMPLATE в члене Flags и используйте члены структуры hInstance и lpTemplateName, чтобы идентифицировать имя ресурса и модуль. Если шаблон уже в памяти, установите флажок OFN_ENABLETEMPLATEHANDLE и используйте член структуры hInstance, чтобы идентифицировать объект памяти, который содержит шаблон. Когда дочерний блок диалога для диалогового окна в стиле Проводника обеспечивается шаблоном, вы должны также установить и флажок OFN_EXPLORER; иначе, система воспримет это, словно бы вы задаете шаблон замены для диалогового окна старого стиля. Обычно, если вы предоставляйте дополнительные средства управления, то должны также предусмотреть и фильтр - процедуру для стиля Проводника, чтобы обрабатывать сообщения новых органов управления.
Вы можете создать свой шаблон дочернего диалогового окна также, как вы делаете любой другой шаблон, за исключением того, что вы должны определить стили WS_CHILD и WS_CLIPSIBLINGS, и еще должны определить стили DS_3DLOOK и DS_CONTROL. Система требует стиля WS_CHILD, потому что ваш шаблон определяет дочерний блок диалога Открыть (Open) или Сохранить как (Save As) по умолчанию. Стиль WS_CLIPSIBLINGS гарантирует, что дочернее диалоговое окно не перерисовывает какой-либо из органов управления в заданном по умолчанию диалоговом окне. Стиль DS_3DLOOK проверяет, чтобы внешний вид органов управления в дочернем диалоговом окне не противоречил органам управления в заданном по умолчанию диалоговом окне. Стиль DS_CONTROL подтверждает, что пользователь может использовать клавишу TAB и другие клавиши навигации по окну, чтобы передвигаться между всеми органами управления, созданными по умолчанию или пользовательскими, в поддерживаемом диалоговом окне.
Чтобы создать место для новых средств управления, система увеличивает заданное по умолчанию диалоговое окно до габаритов пользовательского диалогового окна. По умолчанию, все органы управления пользовательского диалогового окна устанавливаются ниже органов управления в заданном по умолчанию диалоговом окне. Однако, вы можете отменить эту заданную по умолчанию позицию при помощи включения статического текстового органа управления в вашем шаблоне пользовательского диалогового окна и определить значение его идентификатора как stc32. (Это значение определено в заголовочном файле Dlg.h.) В этом случае, система использует орган управления как точку отсчета для определения, где установить новые органы управления. Все новые средства управления stc32 устанавливаются выше и слева от элементов управления в том же самом количестве, выше и слева от средств управления в заданном по умолчанию диалоговом окне. Новые средства управления ниже и справа от элемента управления stc32 устанавливаются ниже и справа от заданных по умолчанию средств управления. Вообще, каждый новый элемент управления устанавливается так, чтобы он имел ту же самую позицию относительно заданных по умолчанию средств управления такую же, какую он имел бы как элемент управления stc32. Чтобы создать место для этих новых средств управления, система добавляет пространство слева, справа, в нижней и верхней части заданного по умолчанию диалогового окна, сколько необходимо.
Система требует, чтобы фильтр - процедура обрабатывала все сообщения, предназначенные для пользовательского диалогового окна и, следовательно, посылала те же самые сообщения окна фильтр - процедуре относительно любой другой процедуры диалогового окна. Например, фильтр - процедура принимает сообщение WM_COMMAND, когда пользователь щелкает по кнопке органа управления пользовательском диалоговом окне. Фильтр - процедура ответственна за инициализацию этих средств управления и извлечение значений для них, когда диалоговое окно закрыто.
Обратите внимание! на то, что когда фильтр - процедура принимает сообщение WM_INITDIALOG, система еще не переместила органы управления в их конечное расположение. |
Заданная по умолчанию процедура диалогового окна обрабатывает сообщения для всех органов управления в заданном по умолчанию диалоговом окне, но фильтр - процедура принимает уведомительные сообщения WM_NOTIFY для действий пользователя этими органами управления как описано в статье Фильтр - процедуры для диалоговых окон в стиле Проводника.