У меня есть некоторый опыт с этим.
Если вам требуется поддержка Windows XP, использование UpdateLayeredWindow - единственный доступный способ решения этой проблемы. Документация для этого вызова говорит, что он копирует все растровое изображение на экран каждый раз, когда он вызывается, и это узкое место показало в моем тестировании как реальный ограничивающий фактор. Если ваше окно 300х300, вы платите эту цену за каждое обновление, даже если вы стараетесь изменить только пару пикселей. Было бы очень легко чрезмерно оптимизировать сторону рендеринга без реальной выгоды, поэтому реализуйте что-то простое, измерьте, а затем решите, нужно ли оптимизировать.
Если вы можете отказаться от поддержки Windows XP, тогда вы можете полностью избежать UpdateLayeredWindow и использовать DwmExtendFrameIntoClientArea, чтобы создать тот же эффект, что и в многослойном окне. Вы напишете меньше кода, избежите узкого места UpdateLayeredWindow, и с D2D будет легче работать.