#c# #.net #.net-2.0
#c# #.net #.net-2.0
Вопрос:
У меня есть приложение NET 2.0 Winforms, частично основанное на этом коде. Он обеспечивает прозрачность формы с помощью UpdateLayeredWindow
API. Он отлично работает в Vista и Windows 7, но не работает в Windows XP.
Я сузил поиск до UpdateLayeredWindow
сбоя с последней ошибкой 8 (недостаточно памяти). Во время экспериментов я также обнаружил, что замена (желаемая) ULW_ALPHA
на ULW_COLORKEY
или ULW_OPAQUE
работает в XP, но дает неправильный эффект (изображение отображается, но прозрачность неправильная).
Мне интересно, не так ли что-то в том, как растровое изображение PNG загружается и обрабатывается NET внутренне, и что в этом есть что-то, что UpdateLayeredWindow
не нравится.
Ответ №1:
Похоже, что это работает, но многоуровневые окна на самом деле не видны, я предполагаю, что настройки непрозрачности неверны. С помощью кода, на который вы ссылались, изменение строки 67 в LayeredForm.cs с «BlendOp = 255» на «BlendOp = 0» устраняет проблему для меня (работает в Windows XP SP3).
Комментарии:
1. Удивительно просто! Спасибо, чувак! Слишком много часов было потрачено на это сегодня, а вы спасли положение. Блестяще.