В какие стандартные приложения windows 7 встроен интерфейс ribbon лента
В данной статье мы немного ближе познакомимся с тем, что же всё-таки представляет собой элемент управления Ribbon, а также узнаем краткую историю его развития. Затем мы попытаемся понять некоторые технические детали написания Ариком его враппера, и, наконец, перейдём непосредственно к созданию первого приложения с лентой.
В конце предыдущей статьи я указал список необходимого ПО, которое понадобится при разработке приложений WinForms с поддержкой Windows Ribbon. Здесь и далее я буду считать, что всё это ПО у нас уже имеется и готово к использованию.
История
Перед тем, как мы начнём программировать, давайте немного поговорим непосредственно о предмете.
Определение (с MSDN): "Windows Ribbon (Ribbon) Framework — это система представления команд с широкими возможностями, являющаяся современной альтернативой меню, панелям инструментов и области задач традиционных Windows-приложений."
В Office 2007 компания Майкрософт представила новый способ организации пользовательского интерфейса в приложении. Проблемой старого UI было то, что он был недостаточно гибким для представления всех возможностей Office. (На самом деле, люди просили добавить функции, которые уже имелись, но были "упрятаны" далеко в меню. )
Лента Microsoft Word 2007
Когда оказалось, что лента Office 2007 стала успешной, многие компании, занимающиеся разработкой UI, реализовали свои варианты лент для использования в приложениях. Ну а когда в Майкрософт осознали, что у них получилось нечто хорошее, они решили вывести ленту "в широкие массы".
Они выпустили 3 (!) версии ленты:
Ну, а что насчёт разработчиков управляемых WinForms-приложений? Они должны использовать третью, основанную на COM, версию. Поэтому цель этих статей — предоставить вам работающие примеры использования Windows Ribbon в приложениях WinForms.
Зачем использовать Windows Ribbon?
Заметьте: вопрос, на который я собираюсь ответить, звучит как "Зачем использовать ЭТОТ элемент управления Ribbon?", а не "Зачем ВООБЩЕ использовать элемент управления Ribbon?" Почему бы не использовать другие ленты? Существуют дюжины сторонних контролов; некоторые из них бесплатны.
Основная причина использования Windows Ribbon Framework - он разработан Майкрософт. Это означает:
- Поскольку он оригинальный, он обладает ВСЕМИ возможностями ленты, в отличие от других бесплатных или коммерческих Ribbon-контролов, в которых всегда найдутся "не реализованные" моменты.
- Он обладает ПОЛНОЙ поддержкой и интеграцией с интерфейсом Windows 7 и специальными возможностями. Просто представьте поддержку сенсорных экранов или совместимость с более высокими разрешениями (DPI) экрана.
К ленте относятся следующие файлы: UIRibbon.idl, UIRibbonKeydef.h и UIRibbonPropertyHelpers.h. Заметьте, что файл UIRibbon.h не интересен, поскольку он автоматически генерируется из UIRibbon.idl компилятором MIDL (англ. Microsoft Interface Definition Language — "язык описания интерфейсов Майкрософт" — прим. переводчика). Все эти файлы устанавливаются вместе с Windows 7 SDK.
Согласно условностям Windows API Code Pack, файл UIRibbon.idl был конвертирован в 4 различных файла:
Эти файлы — преобразованные мной [Ариком] COM-интерфейсы и типы, используемые Windows Ribbon Framework. Эти файлы могут изменяться в процессе развития проекта, поскольку я наверняка допустил какие-то ошибки в преобразованиях и узнаю об этом, когда попытаюсь использовать какую-либо функцию.
(на момент написания этих статей библиотека Windows Ribbon for WinForms уже довольно длительное время находится в стадии релиза, поэтому если Ариком и будут исправляться какие-либо ошибки, то лишь незначительные. — прим. переводчика).
Как работает Windows Ribbon Framework?
Более подробно об этом написано на MSDN , я рекомендую это прочитать. Здесь я дам лишь краткое описание, чтобы мы просто друг друга понимали.
Для инициализации ленты в вашем приложении вам понадобится сделать следующее:
1. Спроектировать оформление ленты, используя разметку вида XAML.
2. Скомпилировать эту XAML-разметку с помощью Microsoft Ribbon Markup Compiler (компилятора разметки ленты), входящего в состав Windows 7 SDK.
3. Сделать бинарный вывод компилятора разметки (неуправляемым) ресурсом вашего приложения.
4. Во время загрузки приложения выполнить CoCreateInstance для класса UIRibbonFramework, который реализует интерфейс IUIFramework .
5. Вызвать framework.Initialize и передать ему ссылку на реализацию интерфейса IUIApplication вместе с HWND (англ. window handle — "описатель окна" — прим. переводчика) окна вашего приложения. Интерфейс IUIApplication отправляет обратный вызов фреймворку ленты, когда ему нужен описатель команды для её обработки (команды представлены кнопками, комбо-боксами и другими стандартными элементами управления).
6. Вызвать framework.LoadUI , который загружает предварительно скомпилированный ресурс и показывает ленту.
На данный момент IRibbonForm описан примерно так:
/ </summary>
/// <param name="newHeight">новая высота</param>
void RibbonHeightUpdated(int newHeight);
>[/code]
Свойство WindowHandle используется для передачи описателя родительского окна фреймворку ленты.
Функция RibbonHeightUpdated используется, чтобы предупредить ваше приложение, что высота ленты изменилась. Поскольку высота ленты может динамически меняться (например, если вы измените размер окна до минимального, лента исчезнет), вам понадобится это предупреждение, чтобы соответствующим образом перераспределить элементы управления на форме (чтобы лента их не перекрыла).
Класс Ribbon на данный момент имеет 2 метода:
- InitFramework — получает вашу реализацию интерфейса IRibbonForm и имя ресурса, который будет использован для загрузки конфигурации ленты.
- DestroyFramework — код очистки, освобождает ресурсы Windows Ribbon Framework.
Эти методы должны быть вызваны, когда главная форма приложения загружается и закрывается соответственно.
Первое WinForms-приложение с лентой
Итак, давайте посмотрим, как использовать класс Ribbon для добавления поддержки в пустое WinForms-приложение. Результатом будет приложение-образец "01-AddingRibbonSupport".
Также добавьте к главной форме (form1.cs) следующие строки:
[code]using RibbonLib;
using RibbonLib.Interop;
Шаг 3 — Указать компилятору UI скомпилировать разметку в процессе построения
Войдите в: Свойства проекта -> События построения -> Командная строка события перед построением. Добавьте следующие 3 строки:
Пояснение: первая строка компилирует файл разметки ленты в сжатый бинарный формат, сопровождаемый маленьким RC-файлом, описывающим его.
Вторая строка создаёт нативный файл ресурса win32, который будет присоединён к нативным ресурсам проекта. Третья строка создаёт DLL-библиотеку с ресурсами из нативного файла ресурса win32.
Теперь скомпилируйте проект, чтобы ввести события перед построением.
Шаг 4 — Реализовать IRibbonForm
Чтобы ваша главная форма реализовывала интерфейс IRibbonForm, описанный в Ribbon.dll, выполните следующие инструкции:
• Фреймворку ленты необходим описатель окна главной формы для инициализации, отсюда:
Замечание: Если вы запускаете своё приложение и не видите ленту, попробуйте увеличить размер окна. Windows Ribbon обладает свойством не показываться, если размер окна слишком мал. К сожалению, стандартный размер окна в Visual Studio слишком мал.
Заключение
На этом пока всё. Теперь я хотел бы сделать несколько авторских замечаний.
3. В шаге, когда необходимо ссылаться на проект Ribbon.csproj, в оригинале было предложено ссылаться на саму библиотеку Ribbon.dll. Дело в том, что на данный момент Windows Ribbon for WinForms "поставляется" в виде не скомпилированного исходного кода, то есть библиотеку нужно также отдельно компилировать. Для упрощения можно просто добавить в решение проект библиотеки.
4. В третьем шаге у меня при компиляции возникли ошибки. Произошло это, возможно, потому, что в пути проекта были русские символы. Поэтому если у вас возникают ошибки при работе компиляторов UICC.exe или RC.exe, попробуйте убрать из пути проекта кириллицу.
Также в следующей статье будет некоторое замечание касаемо метода DestroyFramework. Сама же статья будет посвящена созданию меню приложения (Application Menu) с различными элементами управления.
платформа Windows Ribbon — это обширная система представления команд, которая предоставляет современные альтернативы многоуровневый меню, панелям инструментов и панелям задач традиционных Windows приложений.
Новая парадигма команд
платформа Ribbon — это коллекция интерфейсов api Microsoft Win32, которые поддерживают узел новых возможностей пользовательского интерфейса для Windows разработчиков.
Эта обширная современная платформа команд пользовательского интерфейса предоставляет следующие возможности:
- Простая реализация для создания новых приложений платформы Ribbon и простая миграция существующих приложений Win32.
- Единообразное отображение и поведение в приложениях ленты.
- соблюдение Windows рекомендаций по пользовательскому интерфейсу для первого класса Windows с помощью стандартов специальных возможностей, поддержки визуальных стилей (для работы с ними), автоматической корректировки высокой контрастности и высокого уровня разрешения на дюйм.
Платформа Ribbon состоит из двух основных компонентов пользовательского интерфейса:
- Панель команд ленты, которая состоит из панели быстрого доступа (QAT), которая предоставляет и выделяет различные команды ленты, указанные пользователем или приложением, и строку вкладок, содержащую меню приложения, стандартные или контекстные вкладки, а также кнопку справки.
- Обширная система контекстного меню.
Сочетание декларативного XML и собственного COM-интерфейса используется для отделения представления и функциональности этих компонентов.
Представления
Основные компоненты пользовательского интерфейса платформы Ribbon, панели команд ленты и системы контекстного меню различающиеся по представлениям. Платформа поддерживает два представления: представление ленты и представление контекстпопуп .
Представление ленты
пользовательский интерфейс представления ленты является основным компонентом платформы ribbon и обеспечивает пользовательский интерфейс следующего поколения для представления команд в Windows приложениях.
Лента — это панель команд, которая предоставляет основные возможности приложения с помощью ряда вкладок в верхней части окна приложения. он похож на функциональность и внешний вид для пользовательского интерфейса Microsoft Office 2007 Fluent. лента обеспечивает интуитивно понятный соответствующую процесс обнаружения команд, типичный для стандартных систем меню Windows. Благодаря оптимизации для повышения эффективности и обнаруживаемости лента упрощает поиск, понимание и использование команд с минимальными щелчками мыши и нажатиями клавиш через систему стандартных элементов управления, коллекций и предварительного просмотра.
на следующем рисунке показана реализация платформы Ribbon в Paint для Windows 7.
Представление Контекстпопуп
представление контекстпопуп с помощью всплывающего элемента управления предоставляет более обширную систему контекстного меню, чем доступна в более ранних Windows приложениях. Всплывающее контекстное меню может быть развернуто только при поддержке ленты, а изолированное всплывающее контекстное меню не поддерживается платформой Ribbon.
Архитектура ленты
в отличие от традиционной модели разработки Windows пользовательского интерфейса на основе элементов управления, Windows разработка пользовательского интерфейса платформы Ribbon основана на более абстрактной концепции команд. Изменяя команды, связанные с элементами управления, а не сами элементы управления, платформа может автоматически настраивать пользовательский интерфейс в ответ на состояние выполнения команды, полученное из хост-приложения ленты.
Приложение, использующее платформу Ribbon, предоставляет команды без обязательств с подробными сведениями о том, как эта команда представлена в пользовательском интерфейсе. Иногда это называется моделью пользовательского интерфейса на основе намерения. Тип команды, его свойства и ресурсы определяют назначение команды для приложения. Например, ввод с помощью мыши, ввод с клавиатуры или даже встряхиваний устройство гироскопик может привести к выполнению одной и той же команды. приложение работает только с выполнением команды, а не с тем, как оно было вызвано.
Платформа Ribbon обеспечивает такую гибкость, отделяя функциональные возможности презентации с помощью двух различных структур разработки: языка разметки на основе XAML (XAML) для объявления элементов управления и визуального макета реализации ленты, а также COM-интерфейсы на основе C++ для инициализации платформы и обработки событий во время выполнения. Это различие позволяет разработчикам и дизайнерам пользовательского интерфейса самостоятельно отвечать за внешний вид Ribbon-приложения, а основные функциональные возможности остаются в области инженеров по.
Интерфейсы API ленты
Интерфейсы API ленты обеспечивают необходимые соединения между представлением и ведущим приложением ленты. Эти API-интерфейсы состоят из следующих интерфейсов и ключей свойств:
Набор COM-интерфейсов, реализованных платформой Ribbon для выполнения служб пользовательского интерфейса.
Набор COM-интерфейсов, реализованных ведущим приложением ленты, которое платформа вызывает в ответ на изменения пользовательского интерфейса.
Набор ключей свойств, которые определяют, какие свойства пользовательского интерфейса приложения имеют программный контроль.
Безопасность и конфиденциальность
Библиотека DLL платформы Ribbon (uiribbon.dll) выполняется в процессе и имеет те же привилегии, что и ведущее приложение. Лента принимает только то, что ведущее приложение предоставляет в качестве входных данных или вводимых пользователем данных из строго ограниченных элементов управления, таких как поле со списком "Счетчик" и "редактируемый".
кроме того, платформа не хранит никаких сведений, за исключением того, что предоставлено ведущим приложением или собрано (в соответствии с полномочиями конечного пользователя) с помощью программы согласия Windows пользователя.
Специальные возможности и локализация
Чтобы обеспечить высокодоступный пользовательский интерфейс, платформа Ribbon реализует Microsoft Active Accessibility. Благодаря автоматическому заполнению соответствующих свойств Microsoft Active Accessibility с помощью действительной и полезной информации платформа значительно сокращает нагрузку на разработчиков, чтобы обеспечить широкую работу для всех пользователей.
дополнительные сведения о специальных возможностях в платформе Ribbon см. в разделе работа с Active Accessibility в пользовательском интерфейсе 2007 Office Fluent.
кроме того, платформа Ribbon является Windowsной функцией и, таким образом, локализована для всех языков, которые Windows поддерживаются. Однако разработчики несут ответственность за локализацию собственных ресурсов приложений.
Заключение
Лента — это новая и привлекательная форма команды, которую разработчики приложений, архитекторы и проектировщики должны учитывать при проектировании и создании новых приложений или обновлении существующих.
на форуме Windows ribbon можно обсудить темы и задать вопросы, связанные с разработкой приложений, которые реализуют платформу Windows Ribbon.
В процессе установки программы, инсталлятор предлагает выбрать версию MS Office, установленную на вашем компьютере: 2003 или 2007-2016 и выше и выше. В зависимости от этого будет установлена версия файла Excel: 2003 (с расширением "xls") или 2007-2016 и выше (с расширением "xlsm"). Стандартный язык интерфейса (русский) или дополнительный язык – английский выбирается так же в процессе установки программы.
На работу программы версия MS Office не влияет, однако интерфейсы меню будут разные: стандартное (ниспадающее) меню в Office 2003 и ленточное меню в Office 2007-2016 и выше.Создайте свои проекты и рассчитайте риски (РВ, DPB, NPV, PI, IRR, MIRR и т. д.) – все расчеты «под рукой»! Попробуйте новую версию программы (6.02). Подробности .
Ленточный интерфейс для MS Office (2007-2016):
Стандартное (ниспадающее) меню для MS Office 2003:
Исполняемый модуль программы универсален и работает со всеми версиями MS Office (2003, 2007-2016). При переходе из стандарта 2003 на стандарт 2007-2016, новая установка и регистрация программы не требуется, однако необходимо установить «стартовый» файл Excel (с расширением "xlsm"), который можно скачать с сайта, или самостоятельно сконвертировать старые файлы проектов, если в них есть необходимость.
Переход внутри «стандарта» с расширением "xlsm" (2007, 2010, 2013) вообще не требует никаких дополнительных действий.Особенности ленточного интерфейса
Стандартный интерфейс представляет собой обычное многоуровневое ниспадающее меню. При использовании Excel 2003 (Office 2003) используется стандартное меню, начиная с Excel 2007 (Office 2007-2016) используется ленточное меню. При использовании ленточного интерфейса (Ribbon) вместо заголовков в стандартном меню используются вкладки, и функции распределяются по вкладкам на панели инструментов ("ленте").
При использовании MS Office 2007-2016 и выше, программа будет работать только с версиями, поддерживающими работу макросов, в частности, файлы Excel с расширением "xlsm".В Budget-Plan Express нет стандартного меню Excel, и на время работы программы оно заменяется собственным «ленточным» меню. Так же не доступны настройки и прочие вкладки, которые входят в состав меню Excel, кроме общей вкладки «Файл». Из средств модификаций меню остаются доступными «параметры отображения ленты» (где можно «скрывать», «показывать вкладки» и «показывать вкладки и команды») и «настройка панели быстрого доступа»:
В «настройках панели быстрого доступа» можно разместить стрелки навигации «над лентой» или «под лентой»:
Ribbon, когда-то ненавидимый многими, постоянно совершенствуют и сейчас стоит к нему немного привыкнуть и о старом интерфейсе многофункциональных приложений уже и не думаешь или думаешь, как о чём-то прошлом и неприемлемом для современности.
Но откуда вообще взялся ленточный интерфейс, почему его сейчас любят также, как раньше ненавидели?
Моё знакомство с Офисом началось с версии 97. Да, потом мне попадался Office для Windows 95, но кто на него вернётся с 97-го?
97-й был прекрасен для своего времени. Вот он:
Кстати, слева вверху один из моих Аксесс проектов, сделанных для маленького, но гордого ЧП. Эх, молодость.
Панели инструментов в 97-м офисе были полностью настраиваемые. С удержанной клавишей Alt можно было переместить или скинуть с панели любую кнопку, а открыв окно команд, мышкой вытаскивалась любая кнопка в любое место. Таким образом, не составляло труда настроить Офис под себя. Но большинство, разумеется, этого не делало.
В 2000 офисе в этом плане мало что изменилось. Разве что две панели инструментов стало можно размещать в одну строку - и такой вид был по умолчанию, а вот в Office XP появилась возможность сохранять настройки Office , и это очень важная деталь! Теперь, потратив время и силы на настройки кучи панелей в нескольких приложениях, можно было без труда перенести их на другой компьютер либо восстановить у себя же после сбоя. И местом хранения настроек по умолчанию предлагался Интернет . Этот факт пока также запомним.
Microsoft Office 2003 обзавёлся вертикальными панелями. В мир пошли широкоформатные мониторы, и это место было решено использовать. В остальном это был такой же интерфейс.
На картинке - более серьёзная моя работа в Аксессе для всё того же гордого ЧП - полноценная программа расчёта квартплаты для ЖЭО (ТСЖ)
2003-й офис дольше всех задержался в числе актуальных - целых 4 года ему не приходила замена, а в 2007 нас ждал совсем другой офис. Немало людей, до сих пор не поняв прелестей Риббона, продолжают оставаться верными 2003-му офису.
И пришла Лента
Впрочем, не везде. В версии 2007 года ряд приложений офиса оставался с классическим интерфейсом. Вот так, например, выглядел Паблишер:
Но данная статья о ленте, так что ставим Паблишер.
Изменения интерфейса были радикальными. Впрочем, не менее радикальными они были и в отношении других деталей, включая,но не ограничивая изменения в форматах файлов.
На Microsoft посыпались обвинения, сравнимые с теми, что в будущем обрушатся на них из-за исчезновения кнопки "Пуск" в Windows 8. И они ответили что-то вроде этого:
Конечно это пересказ, а не дословная цитата, но смысл понять можно. Несмотря на возможность настройки панелей инструментов, их почти никто не настраивал, а без этого найти нужную функцию порой действительно непросто. В результате появлялось множество сторонних макросов и дополнений, реализующих те функции, которые есть в системе из коробки. Нередко в этих макросах и дополнениях были вирусы.
Читайте также: