Depository of News

Как мы элегантно решили проблему динамических прав в MFC Ribbon, или Наш ответ Чемберлену из Microsoft

newsdepo.com · tech

<img src="https://habrastorage.org/getpro/habr/upload_files/7e7/748/63e/7e774863ebc151a3d5914d5e1e1c7a97.png" /><p>Привет, Хабр! Сегодня я хочу поделиться небольшим, но очень практичным ноу-хау, к которому мы пришли при разработке крупной распределенной SCADA/HMI-системы для реального завода.</p><p>Если вы когда-нибудь работали с классическим каркасом <code>CMFCRibbonBar</code> в C++/MFC, то наверняка знаете официальную позицию Microsoft по поводу разграничения прав доступа. Документация MSDN и тонны учебников в один голос твердят: <em>«Используйте стандартные обработчики <code>ON_UPDATE_COMMAND_UI</code>! Если у пользователя нет прав на действие — делайте кнопку серой и недоступной»</em>.</p><p>Но давайте спустимся с небес теоретического программирования на землю реального производства. Представьте интерфейс диспетчера, в котором больше 10 вкладок («Цех варки», «Цех упаковки», «Справочники», «Отчеты», «Администрирование пользователей») и сотни кнопок. Если к терминалу подходит обычный рабочий линии, перед ним открывается гигантское «кладбище мертвых серых иконок». Интерфейс перегружен, оператор путается в визуальном шуме, а полезная площадь экрана (которая в промышленных мониторах на вес золота) расходуется вхолостую.</p><p>Мы решили пойти другим путем: <strong>полностью вырезать интерфейс на основе ролевой модели пользователя прямо «на лету»</strong>. То есть директор завода видит все 10 вкладок, а варщик у котла — строго одну вкладку «Котлы». Никакого лишнего шума.</p> <a href="https://habr.com/ru/articles/1081672/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=1081672#habracut">Читать далее</a>

Read full article →