2012-03-12 2 views
2

Я пытаюсь сделать экран Splash Screen 4 приложением Win.Полупрозрачный PNG в качестве экрана всплеска

моя установка:

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

В коде я поставил:

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; 

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

я НЕ хочу, чтобы установить ключ прозрачности, Потому что это вызывает проблемы с dropschadow (полупрозрачная часть в формате PNG)

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

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

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

+0

То, о чем вы просите, недоступно в форме по умолчанию, которую вы щелкните по проекту -> Добавить -> Новая форма. Что вам нужно сделать, это расширить функциональность по умолчанию. У вас уже есть головной старт в коде, который вы разместили, - это то, что вы добавили бы в ваш расширенный класс формы (или некоторую модифицированную версию). Другие вещи, которые вы добавили, - это настраиваемые области, чтобы определить форму формы. Забыл, как сделать прозрачность. Составляя некоторые ссылки на ресурсы. – Jason

+0

Ссылки ресурсов: http://stackoverflow.com/questions/5092216/c-sharp-form-with-custom-border-and-rounded-edges и http://stackoverflow.com/questions/1592876/c-sharp- Make-A-полей форм-подвижный. Однако не уверен в вашей прозрачности, поскольку вы не хотите использовать Transparency Key. – Jason

+1

Честно говоря, чтобы избежать потенциальной проблемы и сложности альтернативных методов использования клавиш прозрачности, вы можете отредактировать границу своего PNG (просто стирайте эти пиксели в Microsoft Paint или волшебную палочку, выбрав остальную часть вашего заставки в Photoshop, инвертируя выделение и удаляя границу) и повторно рисуйте его самостоятельно. – Jason

ответ

3

Я потратил несколько часов на поиск способа сделать это в 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 для нескольких комбинаций ключевых слов, которые я пробовал.

См. Также Transparent Splash Screen, где я нашел это решение с другого сообщения SO.

+0

Я пробовал это, но его изображение с рисунком было очень большим по сравнению ... размещение изображения также неуместно, как будто я его растягиваю, но все еще показываю другим способом. Также я не могу установить прозрачный цвет. – KMX

+0

Возможно, вам будет необходимо изменить размер изображения. Я устанавливаю для ClientSize формы тот же размер, что и изображение. Единственный элемент управления в форме - PictureBox, содержащий изображение. –

+0

Не работает _really_, хотя потому что изображение сзади не меняется. это похоже на ответ «захватить битмап фона». – n00dles

0

Вот простой пример заставки 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.

+0

thx 4 ur code, я уже начал свой проект с заставкой, он почти похож на ур, но, как вы сказали, очень сложно;) anyways thx, WPF - мое решение, я рад, что сейчас знаю WPF. ^^ – Ace

Смежные вопросы