C# Winform 窗体美化(五、鼠标穿透)
2017-04-15 10:57
513 查看
五、鼠标穿透
以前在玩射击游戏的时候,狙击枪的设定一般是开镜才有准星,所以想是不是可以自己造一个默认准星出来,思路是现在窗口上画一个准星,然后把窗体其他区域都透明,然后设置鼠标穿透;结果是:
UpdateLayeredWindow 的不规则窗口中,添加鼠标穿透功能导致不规则窗口失效。
GraphicsPathForm 的不规则窗口中,可以愉快地使用鼠标穿透功能。
注意:
全屏的游戏,窗口是不能最前的,可以先把游戏设置成窗口模式(尴尬),一般游戏切换全屏的按键是“alt+enter”。
代码如下:
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 = 0; [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 SetPenetrate() { this.TopMost = true; SetWindowLong(this.Handle, GWL_EXSTYLE, WS_EX_TRANSPARENT | WS_EX_LAYERED); SetLayeredWindowAttributes(this.Handle, 0, 100, LWA_ALPHA); }
扩展阅读:如何在Windows下使一个窗口在全屏游戏时置顶?
相关文章推荐
- C# Winform 窗体美化(九、嵌入窗体)
- C# 鼠标穿透窗体功能
- C# Winform 窗体美化(二、LayeredSkin 界面库)
- 基于C#的WinForm窗体美化(无须美工功底)
- C# Winform 窗体美化(十、自定义窗体)
- C# winform 无边框窗体鼠标点击移动事件
- Skin控件 C# Winform窗体美化控件
- [转自:https://www.cnblogs.com/dskin/p/4606293.html] C# Winform实现炫酷的透明动画界面 做过.NET Winform窗体美化的人应该都很熟悉U
- C# 鼠标穿透窗体与恢复
- C# Winform中窗体的美化—————— 用IrisSkin4.dll美化你的WinForm
- C# Winform 窗体美化(一、IrisSkin 换肤库)
- C# Winform 窗体美化(三、不规则窗体)
- C# Winform 窗体美化(六、双层窗体)
- C#制作鼠标可以穿透的窗体
- C# WinForm 鼠标左键拖动窗体
- 用C#写依附于桌面的透明带鼠标穿透窗体的总结。
- C# Winform中窗体的美化—— 用IrisSkin轻松实现换肤功能
- C# Winform中窗体的美化——用IrisSkin4.dll美化你的WinForm
- C# Winform 窗体美化(七、Win7 Aero 毛玻璃效果)
- C# 鼠标穿透窗体功能的实现方法