2012-03-12 102 views
2

我試圖讓一個初始屏幕4成爲一個Win應用程序。半透明PNG作爲初始屏幕

我的設置:

窗體邊框樣式設置爲無。起始位置是屏幕中心。 窗體的背景圖像被設置爲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; 

但是當我測試,它說,形式不能有一個透明的背景色。

我不想設定一個透明度關鍵的辯論,因爲這會造成麻煩與dropschadow(巴新的半透明部分)

還我不想不透明度設置爲0%,cuz它也會影響我的PNG 。

其實我只想只顯示我的png作爲窗口。除此之外,還會有一些動態文本和未來的進程欄...

任何想法?如何辨別CAN是否具有透明背景就像ADOBE PHOTOSHOP CS5的啓動畫面

+0

您要求的內容在默認表單中不可用,您可以通過Project - > Add - > New Form單擊。你必須做的是擴展默認功能。您在發佈的代碼中已經有了一些開頭的東西 - 這是您將添加到擴展表單類(或其某些修改版本)的內容。您要添加的其他東西是自定義區域,以定義您的表單形狀。忘記了如何做到透明。提出一些資源鏈接。 – Jason 2012-03-12 12:25:47

+0

資源鏈接:http://stackoverflow.com/questions/5092216/c-sharp-form-with-custom-border-and-rounded-edges和http://stackoverflow.com/questions/1592876/c-sharp-讓-A-無邊框外形移動。雖然不確定您的透明度,因爲您不想使用透明度鍵。 – Jason 2012-03-12 12:27:03

+1

老實說,爲了避免使用透明鍵的替代方法的潛在麻煩和複雜性,您可能需要編輯出PNG的邊界(只需擦除Microsoft Paint上的像素或魔術棒,然後在其中選擇剩餘的啓動畫面Photoshop,反轉選區並刪除邊框)並自行重新繪製。 – Jason 2012-03-12 12:29:33

回答

3

我花了幾個小時尋找一種方法在Win表單中做到這一點,所以我想我會分享我的解決方案。

我的啓動畫面圖像是一個帶有透明背景和透明背景上的各種陰影的.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; 
    } 

我只是撞到這個舊線因爲這是我嘗試過的幾個不同的關鍵字組合的谷歌搜索結果。

另請參見Transparent Splash Screen這是我從另一個SO帖子中找到該解決方案的地方。

+0

我試過這個,但是它的繪畫圖像相當大......圖像的位置也是放錯地方,就像我有伸展但仍然顯示其他方式。另外我不能設置透明顏色。 – KMX 2016-06-22 00:16:57

+0

您可能需要調整圖像大小。我將表單的ClientSize設置爲與圖像大小相同。窗體上唯一的控件是包含圖像的PictureBox。 – 2016-07-22 14:53:43

+0

因爲後面的圖像沒有改變,所以不會真的_really_工作。它與'獲取背景的位圖'相似。 – n00dles 2017-07-24 01:55:15

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的例子,但如u說,很多複雜;) 反正THX, WPF是我的解決方案,我很高興我現在知道WPF。 ^^ – Ace 2012-03-12 13:50:32