1. 程式人生 > >C# Winform實現炫酷的透明動畫介面(轉載)

C# Winform實現炫酷的透明動畫介面(轉載)

http://www.cnblogs.com/Joetao/articles/4631868.html

做過.NET Winform窗體美化的人應該都很熟悉UpdateLayeredWindow吧,UpdateLayeredWindow可以實現窗體的任意透明,效果很好,不會有毛邊。不過使用這個API之後,會有一個問題就是無法使用普通控制元件,而且沒有Paint訊息。為了解決這個問題,有兩種方法。

一、使用雙層窗體,底層窗體使用UpdateLayeredWindow作為背景,上層窗體用普通窗體,並且可以使用TransparencyKey或者Region來實現去除不需要的窗體內容,讓上層窗體能看到底層的窗體。

二、直接單層窗體,使用控制元件的DrawToBitmap把控制元件影象繪製到UpdateLayeredWindow的窗體上,這樣就可以看到普通控制元件了。不過這個也有問題:1.控制元件內容不能自動更新  2.效率低,很多控制元件使用DrawToBitmap繪製出的影象不完整,甚至繪製不出影象。比如TextBox無法顯示游標,WebBrowser無法顯示內容。

 三、採用DirectUI技術,重寫所有基礎控制元件。效果最好,不過工作量巨大。

使用UpdateLayeredWindow時,一般是需要對Bitmap快取起來,通過設定剪輯區域,區域性重繪來提高效率。另外還可以非同步重繪,模擬Winform的失效到重繪。

有些人會說為什麼不直接用WPF啊,Wpf和Winform各有優缺點,適應不同的場合。Winform相對於使用更簡單一些,系統要求更低。當然需要看人的習慣了和擅長的。

UpdateLayeredWindow 基本使用方法:

重寫窗體的 CreateParams 屬性

1 2 3 4 5 6 7 8 9 protected   override  CreateParams CreateParams { get { CreateParams cp  =   
base .CreateParams; cp.ExStyle  |=   0x00080000 ;  //  WS_EX_LAYERED 擴充套件樣式 return  cp; } }

API呼叫:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 public   void  SetBitmap(Bitmap bitmap,  byte  opacity) { if  (bitmap.PixelFormat  !=  PixelFormat.Format32bppArgb) throw   new  ApplicationException( "點陣圖必須是32位包含alpha 通道" ); IntPtr screenDc  =  Win32.GetDC(IntPtr.Zero); IntPtr memDc  =  Win32.CreateCompatibleDC(screenDc);

相關推薦

C# Winform實現透明動畫介面(轉載)

http://www.cnblogs.com/Joetao/articles/4631868.html 做過.NET Winform窗體美化的人應該都很熟悉UpdateLayeredWindow吧,UpdateLayeredWindow可以實現窗體的任意透明,效

android實現水波紋介面

利用正弦函式 1、這篇是兩條水波紋,樣子類似點融(理財),波浪上面還漂浮一個圖示,超炫酷 2、多條水波紋聯動效果(容易出現問題) 1)有種向右漂移的感覺 2)動著動著就重合了(大姨媽app) 利用2階貝塞爾曲線 1、android 繪製波浪線 2、 Android 貝

C# Winform 實現自定義半透明loading載入遮罩層

在網頁中通過div+css實現半透明效果不難,今天我們看看一種在winfrom中實現的方法: 效果圖如下,正常時: 顯示遮罩層時: 自定義遮罩層控制元件的原始碼如下: 1 using System; 2 using System.Drawing

Android中使用SVG實現動畫效果

前言 SVG,即Scalable Vector Graphics 可伸縮向量圖形。這種影象格式在前端中已經使用的非常廣泛,而在移動端的開發中,遇到一些複雜的自定義控制元件或者動畫效果,我們就可以考慮使用SVG。 一.Vector Drawable

Android自定義View實現的主題切換動畫(仿安客戶端)

前兩日偶然看到了一個很炫酷的動畫效果: 判斷它是不是用的ValueAnimator, 如果是的話, 我們可以在設定-開發者選項裡面設定 “動畫時長縮放”來改變動畫時長. 所以這次我們通過設定這個選項, 把動畫速度降低之後, 很快就看出了其中的奧妙

C# Winform實現捕獲窗體最小化、最大化、關閉按鈕事件的方法

comm c# 基於 prot void 地址 tp服務器 plugin ant 本文實例講述了C# Winform實現捕獲窗體最小化、最大化、關閉按鈕事件的方法,主要是通過重寫WndProc來實現的。分享給大家供大家參考。具體方法如下: 主要功能代碼如下:const i

C# winform實現記住用戶登錄的登錄狀態

end lose 用戶名 clas for 用戶 final con ring namespace DMS { public class LoginInfo { public string AccountID {

C# WinForm實現Windows 7 Aero磨砂玻璃效果

代碼 ear bool 效果 lac err mis 桌面 onload 代碼 using System; using System.Collections.Generic; using System.ComponentModel; using System

c# winform 實現打印功能(未完)

ble preview raw using ntp review winform setup print 1.打印控件介紹(Document屬性設置為PrintDocument1;ShowDialog()方法顯示對話窗) PrintDialog控件(打印會話):用於選擇打印

uwp - 做一個相對動畫按鈕/按鈕動畫

原文: uwp - 做一個相對炫酷的動畫按鈕/按鈕動畫   看膩了系統自帶的button animation何不嘗試下自定義一個較為炫酷的動畫順便提升使用者體驗。效果圖: 動畫分為幾個部分,分別是:內圓從中心放大(1)並同時漸隱(2),外圓從中心放大(3)並同時漸隱(4),按鈕整體從中心縮小放大(5)

C#Winform 實現資料的匯出為txt或者CSV或者excel

//filePath 為儲存到本地磁碟的位置 private void Export(string filePath) { using (FileStream fs=new FileStream(filePath,FileMode.Create,

的登入介面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http

如何在網頁中做出動畫(使用Spine)

屬性動畫和幀動畫 web中的動畫主要分為屬性動畫和幀動畫兩種,屬性動畫是通過改變dom元素的屬性如寬高、字型大小或者transform的scale、rotate等屬性,在一段時間內,屬性值按照時間函式變化來實現的。幀動畫是通過在一段時間內按照一定速率替換圖片的方式來實現,這個和傳統的動畫方式一致。 幀動畫

安卓開發-的登入介面

 最近在寫一個App,為了介面的美觀,真的花了不少的心思。今天就要分享一下自己寫的一個登入頁面,這是使用的DialogFragment框架進行改造的。自己覺得還不錯,很簡單,也很美觀。在這裡我採用的彈窗的方法進行輸入,當用戶點選密碼和使用者名稱的時候,會彈框然後提示使用者輸入,然後,當

c語言實現單鏈表的所有介面

此次工程還是使用了3個原始檔slist.h(標頭檔案原始碼),slist.c(實現介面的具體程式碼),test.c(單鏈表邏輯) slist.h #pragma once #include<stdio.h> #include<stdlib.h> #inclu

python的簡潔程式碼,實現的座標圖!

python簡潔的程式碼實現炫酷的功能,一副座標圖獻給各位看官瞧瞧 # -*- coding: utf-8 -*- """ Created on Fri Jan 19 13:34:15 2018 @author: administrator """ im

C#winform實現滑鼠響應左鍵按下,並記下其座標

private void Form1_MouseClick(object sender, MouseEventArgs e) { this.label1.Text = "相對座標:" +this.PointToClient(Mous

mix-blend-mode及background-blend-mode實現的圖片樣式

在網上看到了有如相機功能的mix-blend-mode實現比較好看的圖片樣式,自己也想弄下,在這裡記錄下 1.效果圖 2.mix-blend-mode相關屬性 { mix-blend-mode: normal; // 正常

C#Winform實現無邊框窗體滑鼠拖動

在有時候我們為了實現軟體的美觀,我們需要把窗體的邊框隱藏,但是問題也會隨之而來,在屬性中設定了FormBorderStyle應該為None,邊框便可以隱藏,但是我們在使用軟體時卻無法拖動窗體,

Android的UI介面

Android酷炫實用的開源框架(UI框架) 前言 忙碌的工作終於可以停息一段時間了,最近突然有一個想法,就是自己寫一個app,所以找了一些合適開源控制元件,這樣更加省時,再此分享給大家,希望能對大家有幫助,此博文介紹的都是UI上面的框架,接下來會有其他的開源框架(如:HTTP框架、DB框架)。