65.9K
CodeProject 正在变化。 阅读更多。
Home

创建动态半透明对话框

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.07/5 (11投票s)

2008年8月2日

CPOL

2分钟阅读

viewsIcon

50438

downloadIcon

1226

使用两种常用技术创建不常见的用户界面。

引言

在启用了 Aero UI 的 Vista 机器上,一定会有一件事从屏幕上跳出来:对话框是半透明的。 这种半透明的用户界面令人耳目一新。 有人可能会误以为这种令人惊叹的用户界面只能在高端 Vista 机器上使用。 事实是,通过少量的努力,您可以使用不太为人所知但简单的 API 在 XP 上复制这种花哨的效果。 更进一步,我们甚至可以动态地调暗或调亮对话框应该具有的透明度。

背景

(可选) 需要对 MFC 有基本的了解。

使用代码

该项目是独立的,使用 MS VC8 构建。 或者,您可以将 .cpp.h 文件复制到您自己的项目中并直接使用它们。

关注点

使用两个 Win32 API 构建半透明对话框非常简单

  • SetWindowLongPtr - 设置分层窗口,为下一步做准备。 与 SetWindowLongPtr 类似,以前还有一个版本,SetWindowLong,现在已被最新的 MSDN 更新中的 SetWindowLongPtr 替换。
  • SetLayeredWindowAttributes - 注意它的第三个参数(值范围从 0 到 255),它决定了对话框的不透明度级别。 0 使对话框完全透明,而 255 显示一个实心对话框。

为了使对话框更具交互性,该示例允许用户调整不透明度级别。 它通过重写 PreTranslateMessage 来实现。 在 MFC 应用程序中,PreTranslateMessage 通常是捕获或更改关键组合的默认行为的正确位置。 在此调用中自定义的是两组关键组合

  1. SHIFT+D:使对话框变暗,这意味着使其不那么透明。
  2. SHIFT+B:调亮对话框;换句话说,使对话框越来越透明。

将这些小步骤放在一起,您将看到一个非常流畅的对话框,它轻轻地“绘制”在屏幕上。 并且,您可以按键组合来切换对话框的透明度级别。 看到它运动起来真有趣。 尝试一下,享受吧!

历史

  • 首次签入日期为 2008 年 8 月 1 日。
© . All rights reserved.