窗口的鼠標穿透功能


(即顯示文字的同時不影響下面窗口的操作) //加入WS_EX_TRANSPARENT擴展屬性

ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TRANSPARENT);
//加入WS_EX_LAYERED擴展屬性

ModifyStyleEx(WS_EX_APPWINDOW,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

把窗體的FormBorderStyle設為

FormBorderStyle.None

 

using System.Runtime.InteropServices;

private const uint WS_EX_LAYERED = 0x80000;

private const int WS_EX_TRANSPARENT = 0x20;

private const int GWL_STYLE = (-16);

private const int GWL_EXSTYLE = (-20);

private const int LWA_ALPHA = 0x2;//

設置透明度

 

[DllImport("user32", EntryPoint = "SetWindowLong")]

private static extern uint SetWindowLong(

IntPtr hwnd,

int nIndex,

uint dwNewLong

);

[DllImport("user32", EntryPoint = "GetWindowLong")]

private static extern uint GetWindowLong(

IntPtr hwnd, 

 

 

int nIndex

);

[DllImport("user32", EntryPoint = "SetLayeredWindowAttributes")]

private static extern int SetLayeredWindowAttributes(

IntPtr hwnd,

int crKey,

int bAlpha,

int dwFlags

);

/// <summary>

///

使窗口有鼠標穿透功能

 

/// </summary>

public void CanPenetrate()

{

uint intExTemp = GetWindowLong(this.Handle, GWL_EXSTYLE);

uint oldGWLEx = SetWindowLong(this.Handle, GWL_EXSTYLE, WS_EX_TRANSPARENT | WS_EX_LAYERED);

SetLayeredWindowAttributes(this.Handle, 0, 100, LWA_ALPHA);

 

 

要時窗體恢復正常,只要執行以下語句: 

this.FormBorderStyle = FormBorderStyle.None;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM