Win32 API. Библиотека стандартных диалоговых окон - Пользовательские шаблоны в стиле Проводника
ОГЛАВЛЕНИЕ
Пользовательские шаблоны в стиле Проводника
Чтобы определить дополнительные элементы управления для Диалогового окна Открыть (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_NOTIFY для действий пользователя на этих элементах управления как описано в статье Фильтр - процедуры для диалоговых окон в стиле Проводника.