.NET Windows窗体透明控件
我想在
Windows Forms应用程序中模拟“Web 2.0”灯箱样式UI技术.也就是说,通过在窗口的客户区域中的所有其他内容进行“调光”来提请注意一些前台控制.
明显的解决方案是创建一个简单的部分透明矩形的控件,可以将其停靠在窗口的客户端区域,并将其带到Z-Order的前面.它需要像玻璃的肮脏的疼痛,其他控制仍然可以看到(因此继续画自己).这可能吗? 我有一个很好的狩猎,并尝试了一些技巧我自己,但迄今为止没有成功. 请参阅:http://www.useit.com/alertbox/application-design.html(在灯箱部分的屏幕截图中说明我的意思.)
你可以在.NET / C#中执行此操作吗?
是的,你当然可以,但需要一点点努力.我会推荐以下方法.创建没有边框或标题栏区域的顶级窗体,然后通过将TransparencyKey和BackColor设置为相同的值,确保它不绘制客户区域背景.所以你现在有一个没有任何东西的窗口 public class DarkenArea : Form { public DarkenArea() { FormBorderStyle = FormBorderStyle.None; SizeGripStyle = SizeGripStyle.Hide; StartPosition = FormStartPosition.Manual; MaximizeBox = false; MinimizeBox = false; ShowInTaskbar = false; BackColor = Color.Magenta; TransparencyKey = Color.Magenta; Opacity = 0.5f; } } 在您的窗体的客户区域创建并定位此DarkenArea窗口.然后,您需要能够显示窗口,而不需要重点,因此您将需要以下列方式调用平台来显示,而不会变为活动状态 public void ShowWithoutActivate() { // Show the window without activating it (i.e. do not take focus) PlatformInvoke.ShowWindow(this.Handle,(short)SW_SHOWNOACTIVATE); } 您需要使其实际上绘制一些东西,但不包括要保持突出显示的控件区域中的绘图.所以重写OnPaint处理程序并绘制黑色/蓝色或任何你想要的,但不包括你想要保持明亮的区域… protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); // Do your painting here be exclude the area you want to be brighter } 最后你需要覆盖WndProc,以防止鼠标与窗口进行交互,如果用户尝试像点击黑色区域一样疯狂.这样的东西 protected override void WndProc(ref Message m) { if (m.Msg == (int)WM_NCHITTEST) m.Result = (IntPtr)HTTRANSPARENT; else base.WndProc(ref m); } 这应该足以获得预期的效果.当您准备好反转处理DarkenArea实例并继续执行的效果时. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何获取skype bot apis的授权令牌?
- 如何在Windows Server 2008中调整主分区的大小?
- Microsoft SQL Server Management Studio – 将结果作为文本
- windows-server-2008 – Win2008:SC SDSET – 如何授予特定
- windows – 任何用户都可以访问%APPDATA%文件夹
- windows-phone-7 – 如何获得当前的GPS时间?
- Windows – 如何使用InnoSetup安装驱动程序?
- 如何从SVG文件批量创建Windows中的图标webfonts
- 如何在新的U / EFI框中从Windows检索序列号?
- windows-server-2008 – Windows Server 2008 – Windows S