[英]Reverse Form Click-Through?
因此,您可以創建一個表格,點擊即可
進口:
[DllImport("user32.dll", SetLastError = true)]
static extern int GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport("user32.dll")]
static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
碼:
int initialStyle = GetWindowLong(this.Handle, -20);
SetWindowLong(this.Handle, -20, initialStyle | 0x80000 | 0x20);
現在,一旦運行代碼,我將如何恢復效果?
我嘗試了這個:
int initialStyle = GetWindowLong(this.Handle, -20);
SetWindowLong(this.Handle, -20, initialStyle | 0x10000 | 0x10);
但這沒有用。
提前致謝!
作為另一種選擇,您可以通過以下方式刪除這些樣式:
var style = GetWindowLong(this.Handle, -20);
SetWindowLong(this.Handle, -20, style & ~(0x80000 | 0x20));
注意
使用以下常量將更易於理解代碼:
const int GWL_EXSTYLE = -20;
const int WS_EX_LAYERED = 0x80000;
const int WS_EX_TRANSPARENT = 0x20;
為了將樣式恢復到其初始狀態,您需要從第一個代碼段中將樣式設置為initialStyle
的值。
您不能只是簡單地繼續在樣式上添加更多標志,並期望它恢復正常。
public class Example
{
private int _initialStyle = 0;
public void ApplyStyle()
{
_initialStyle = GetWindowLong(...);
SetWindowLong(..., _initialStyle | /* styles */);
}
public void RestoreStyle()
{
SetWindowLong(..., _initialStyle);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.