Я смущен поддержкой Delphi 2009/2010 функций Aero Theme Glass в Windows и тем, что именно означает DoubleBuffered, и что это связано с Aero glass. Я обнаружил, что DoubleBuffered - это не только свойство в VCL, но и в .net WinForms. Сначала я задавался вопросом, установлен ли какой-то бит стиля окна, используемый библиотекой общих элементов управления, или что. Почему он используется и когда он должен использоваться?
[Обновление: я должен указать, что я знаю, что такое "двойная буферизация", как общая техника для уменьшения мерцания, что я задаю себе вопрос, почему это имеет НИЧЕГО, что делать с элементами управления рендерингом на панели Aero Glass Windows Vista/Windows 7 и, в частности, почему для каждой кнопки нужно иметь двойную буферизацию, чтобы работать над стеклом?. Сообщение в блоге, приведенное ниже, кажется наиболее информативным.]
В частности, меня смущает свойство DoubleBuffered, и я хочу знать, почему он существует и какова его связь между поддержкой стекла и двойным буферизацией в форме и элементе управления. Когда вы читаете статьи на С++, подобные этому, вы видите, что нет упоминания о двойной буферизации.
[Update2: Ниже приведены некоторые фактические ошибки и были изменены:]
Я обнаружил, что некоторые разработчики на С++ говорят о том, как они могут вызывать SetLayeredWindowAttributes, чтобы избежать сбоя "черного стекла", который возникает при компоновке DWM/Aero, когда вы включаете его в свое классическое приложение Win32 [однако ссылка в блоге ниже говорит мне, что это больше не работает в Windows 7 и фактически только ненадолго работал в Vista, пока Microsoft не заблокировала его]. [Начните НЕПРАВИЛЬНУЮ идею] Не следует ли использовать какой-либо другой цвет, например яркий пурпурный, и превратить его в прозрачный цвет стекла? [End WRONG Idea]
Каковы правила, когда DoubleBuffered должен быть установлен и не установлен, и почему DoubleBuffered был добавлен в VCL в первую очередь? Когда это вызовет проблемы при установке? (Кажется, удаленный рабочий стол - это один случай, но это единственный случай?), И когда он не задан, мы получаем сглаженный отрисовку текста кнопки, скорее всего, потому что похоже, что Delphi не изменяет значение по умолчанию "render black as glass" "в Aero DWM.
Мне кажется, что рендеринг Aero Glass выполняется принципиально странным или трудно понятным способом [самой Windows, а не Delphi, которая просто обертывает эту функциональность], и что много внутреннего исходного кода VCL в 2009 году /2010 в классах в StdCtrls должен сделать много сложной логики, чтобы правильно отображать материал на Aero Glass, и все же у него все еще много проблем и выглядит так, как будто это было неправильно, и что это может быть за этим связанный вопрос и проблема с qc. [Update3: много ошибок при рендеринге на стекле, в VCL выполняется некорректно внутри общих элементов управления, что кажется, Microsoft не заботится об исправлении, Короче говоря, исправления кода Delphi VCL не могут исправить тот факт, что антивирусная библиотека общих библиотек Windows и современная [но причудливая] композиционная функция Aero Glass не очень любят друг друга и плохо работают друг с другом. Спасибо Microsoft за создание такой высококачественной технологии и ее развязывание в мире.]
И если это еще не было достаточно весело; Почему у нас есть ParentDoubleBuffered?
[Обновление от 30 июля. Этот вопрос мне интересен, потому что я думаю, что это говорит о том, что работа над Windows API для решения этой проблемы, когда у вас есть большая существующая инфраструктура VCL, является тяжелой проблемой.]