Полупрозрачный PNG в качестве заставки - PullRequest
2 голосов
/ 12 марта 2012

Я пытаюсь сделать Splash Screen 4 приложением Win.

мои настройки:

стиль границы формы не установлен.Начальная позиция - центр экрана.фоновое изображение формы настроено на PNG-файл с закругленными краями и «встроенной» тенью.

В коде, который я установил:

this.SetStyle( ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle( ControlStyles.UserPaint, true);
this.SetStyle( ControlStyles.DoubleBuffer, true);
this.SetStyle( ControlStyles.SupportsTransparentBackColor, true);

this.AllowTransparency = true;
this.BackColor = Color.Transparent;

, но при тестировании, это говорит о том, что форма не может иметь прозрачный фоновый цвет.

Я не хочу устанавливать ключ прозрачности, потому что это вызывает проблемы с dropchadow (полупрозрачной частью png)

также я не хочу устанавливать непрозрачность на 0%, потому что это также влияет на мой PNG.

на самом деле я просто хочу, чтобы только мой png отображался как окно.Кроме того, в будущем будет динамический текст и панель процессов ...

Есть идеи?как сказать, что форма МОЖЕТ иметь прозрачный фон как заставка ADOBE PHOTOSHOP CS5

Ответы [ 2 ]

3 голосов
/ 09 марта 2014

Я потратил несколько часов на поиски способа сделать это и в Win Forms, поэтому подумал, что поделюсь своим решением.

Мое изображение заставки представляет собой файл .png с прозрачным фоном и различными тенями, которые растягиваются по прозрачному фону. Использование необычных цветов в качестве фона элемента управления вместе с клавишей прозрачности оставляли некрасивые пятна под полупрозрачными тенями.

Я смог получить желаемый результат, установив фоновое изображение формы для изображения, которое я хотел отобразить, и переопределив функцию OnPaintBackground следующим образом:

    bool painted = false
    protected override void OnPaintBackground(System.Windows.Forms.PaintEventArgs e)
    {
        if (painted) return;
        e.Graphics.DrawImage(BackgroundImage, new System.Drawing.Point(0, 0));
        painted = true;
    }

Я только сталкиваюсь с этой старой темой, потому что это лучший результат Google для нескольких различных комбинаций ключевых слов, которые я пробовал.

См. Также Прозрачный экран-заставка , где я нашел это решение из другого сообщения SO.

0 голосов
/ 12 марта 2012

Вот простой пример заставки WPF.Это все в XAML.Я не писал строки на C #, чтобы она работала.

<Window x:Class="WpfSplashScreen.SplashScreen"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        WindowStyle="None" Background="Transparent" AllowsTransparency="True"
        ShowInTaskbar="False" SizeToContent="WidthAndHeight"
        WindowStartupLocation="CenterScreen">
    <Image Source="logo.png" Stretch="None" />
</Window>

Это всего лишь пример, и мне понадобится еще немного кода, чтобы сделать его полезным, но это то, как просто работает заставкаWPF.

...