Winform完成鼠標可穿透的窗體镂空後果。本站提示廣大學習愛好者:(Winform完成鼠標可穿透的窗體镂空後果)文章只能為提供參考,不一定能成為您想要的結果。以下是Winform完成鼠標可穿透的窗體镂空後果正文
明天找到一個名叫LICEcap的錄屏軟件,錄制界面是如許的:
這個炫酷的空心窗口就是鏡頭,調劑好年夜小,然後瞄准須要錄制的處所按下Record便可以生成gif了。
臥槽太NB了我也要做一個!
依據StackOverflow站的提醒(在這裡),我們須要應用一個在Windows2000及以後平台可用的,用以完成不規矩窗體的分層窗口API (SetLayerWindowAttributes).依據百度我們先須要應用一個名為SetWindowLong的Win32 API來把窗體設定為分層窗體。
為了在.NET平台中挪用Win32 API,我們須要溫習下P/Invoke的內容:
1.甚麼是P/Invoke
P/Invoke 的全稱是Platform Invoke。.是一種在托管平台下應用非托管dll中導出函數的一種挪用機制。
2.若何用P/Invoke
它長如許:
[DllImportAttribute("user32.dll", EntryPoint="SetCursorPos")] public static extern bool SetCursorPos(int X, int Y) ;
順次指明挪用的dll稱號,導出函數名,然後界說成C#尺度的辦法就好了。
所以,我們須要: 翻開百度百科,搜刮API稱號,檢查宿主dll,抄來函數原型,依照解釋界說須要的常量。
不,我找到了更便利的方法:翻開pinvoke.net,搜刮API稱號:
依照裡邊的C#Signature復制過去,再依據Sample Code改改,就OK了。
然後在Visual Studio裡新建一個Winform項目,在主窗口代碼裡如許寫:
public partial class Form1 : Form { public Form1() { InitializeComponent(); this.TopMost = true; SetWindowLong(this.Handle, GWL_EXSTYLE, WS_EX_LAYERED); SetLayeredWindowAttributes(this.Handle, 65280, 255, LWA_COLORKEY); } private const uint WS_EX_LAYERED = 0x80000; private const int GWL_EXSTYLE = -20; private const int LWA_COLORKEY = 1; [DllImport("user32", EntryPoint = "SetWindowLong")] private static extern uint SetWindowLong(IntPtr hwnd,int nIndex,uint dwNewLong); [DllImport("user32", EntryPoint = "SetLayeredWindowAttributes")] private static extern int SetLayeredWindowAttributes(IntPtr hwnd,int crKey,int bAlpha,int dwFlags); }
先應用SetWindowLong將窗口界說為分層窗體,然後挪用SetLayeredWindowAttributes辦法設置通明。
個中第二個參數crKey為一個int型的色彩值,轉換方法為(int)(0xRRGGBB),本例中Dec(0x00FF00)=65280為綠色。
第四個參數為通明方法,本例中應用LWA_COLORKEY = 1,表現將該窗口色彩為crKey的部門都設置為通明。
是以響應地,我們須要在窗口設計器中畫一個色彩為綠色的方塊。本例中應用了一個PictureBox,並設置了配景色彩。
F5運轉,後果如圖:
能想到的用途之一就是,包裝幾個不相干的內部法式為一個全體.