Документация и примеры API для рисования на Windows Aero Glass (DWM, GDI, GDI+) для всех программистов Win32
Я ищу хорошие ресурсы для обучения использованию API-интерфейсов Win32/GDI или чего-либо другого, заменяющего его для рисования и рисования непосредственно с использованием Win32 API в стеклянную форму.
Пока я использую Delphi, я пометил это как Delphi или Visual C++. Будем благодарны за любые примеры кода и статьи, которые вы сможете найти. Статьи MSDN, кажется, не написаны об этом.
В качестве цели давайте представим, что вы хотите: (a) воспроизвести действия Google Chrome (вкладки как часть стеклянной рамки) (b) воспроизвести действия MS Office 2010 (кнопка сохранения на стеклянной рамке, упоминаемая в MFC для VS 2010, как "Панель быстрого доступа" (см. Рисунок ниже).
Я не использую MFC, но если изучение источников MFC будет хорошим источником информации, мне интересно знать, где в источниках MFC или в исходных источниках BCG (у меня есть оба) реализован код рендеринга / рисования панели быстрого доступа.
Обновление: Связанная ссылка neato из одного из ответов ниже показывает сообщение NC (nonclient) Paint, как его обрабатывать при рисовании на стеклянной раме, и статью MSDN об этом здесь.
5 ответов
Это подмножество моей папки закладок "Стекло", результат многих исследований / поисков по этой теме. Я нашел все это полезным для изучения стекла и решения различных задач на нем. Большинство из них включают в себя код Delphi, но я отметил, что это для другого языка.
Простые стеклянные ссылки
- Использование полупрозрачных окон с Delphi: хорошее введение (с самых основ) для использования Glass в формах Delphi
- Пользовательский рисунок на стекле: описывает, как рисовать растровое изображение или другое изображение на стеклянной области окна. Обложки альфа-каналов и т. Д., Хороший обзор
- Использование стекла в проекте VC++: охватывает включение стекла, рисование текста, обработку уведомлений и т. Д. - хорошее общее представление о том, как это работает. Многие базовые детали обрабатываются VCL (например, свойство GlassFrame и внутренняя часть TForm заботятся о многом), но очень полезно понять основы того, как это реализовано на уровне API в любом случае
- Как рисовать в не-клиентской области: это показывает, как нарисовать что-то вроде панели инструментов Office в строке заголовка. .Net код, но переводимый
- Настройка пользовательской строки заголовка: очень подробная статья о рисовании вне клиентской области (в Delphi, поэтому код Delphi). Вслед за частью 2, которая демонстрирует полностью захват всего окна и имитацию стандартной строки заголовка самостоятельно. Эти две статьи позволят вам подражать Office и Chrome, как вы и просили в вопросе
- Как настроить различные элементы управления VCL для лучшей работы на стеклянной поверхности: VCL не очень хорошо поддерживает стекло. Вы часто будете получать артефакты или элементы управления, просто не рисуя должным образом, независимо от того, что вы делаете, чтобы попытаться решить их. В этой статье перечислены основные визуальные компоненты VCL (метки, кнопки, индикаторы выполнения и т. Д.) И что нужно настроить для каждого из них, чтобы они рисовались идеально или, по крайней мере, "как можно лучше", когда они размещены на стеклянной поверхности.
Продвинутый или тангенциально связанный:
- Как работает композиция для рабочего стола с поверхностями GDI и DirectX
- Список API-интерфейсов менеджера рабочего стола (только некоторые из которых связаны с Aero)
Я уверен, что вы нашли страницу MSDN о DWM. В нем много тем и нескольких примеров. В некоторых из "обзорных" статей есть примеры (например, " Обзор размытия DWM").
К сожалению, кроме документации, очень мало хороших статей. Вы можете начать с использования стекла в кодпроекте и взглянуть на детектирующее стекло в delphi - после этого использование функций прямо из документа не так уж плохо. К счастью, все они довольно просты на практике.
Хороший веб-сайт для стеклянных компонентов, включая кнопку Glass:
Кроме того, эти старые статьи могут помочь вам: