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

屏幕显示,OSD

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.87/5 (15投票s)

2002年11月19日

CPOL

3分钟阅读

viewsIcon

208638

downloadIcon

5464

讨论 OSD 并展示如何在 Win32 下实现一个。

Sample Image - Forecast.jpg

前言

屏幕显示 (又名 OSD) 是我多年前在索尼电视上首次看到的一些很酷的功能。今天,我将向您展示如何将OSD实现为一个独立的Win32可执行应用程序,该应用程序根据在线资源报告实时天气信息。

什么是OSD?

OSD实际上是在发生特定事件时提供给用户的一些信息。例如,当用户决定调节电视音量时,屏幕底部(或顶部)会出现文字,显示电视上已经设置的音量的百分比。它还在屏幕右上角显示用户已经选择的频道号,通常为绿色,持续两秒钟。这就是OSD的全部内容。

考虑因素

要开始开发一个漂亮的东西,请记住,OSD不应该以任何形式干扰用户的操作。例如,当屏幕上显示文字时,如果用户试图打开她的Windows资源管理器,会发生什么?

好吧,我们在开发OSD时需要记住三件事

  1. 该窗口必须始终位于最顶层,否则,文字可能会被隐藏在新打开的窗口后面。这个功能是通过使用WS_EX_TOPMOST样式赋予我们的OSD窗口的。
  2. 在屏幕上显示的文字的视觉透明度是您在开发OSD时要考虑的第二件事。这通过使用WS_EX_TRANSPARENT样式赋予我们的窗口。通过这种方式,用户也可以看到文字后面的内容。
  3. 用户应该能够使用她的鼠标或她可能拥有的任何类型的指向设备来选择文字后面的窗口和/或图标。这应该是OSD最有效的功能,通过使用WS_EX_LAYERED样式赋予我们的窗口(感谢微软,它随Win2K一起发布了这个很酷的功能)。

给我一个例子!

我将在这里带给你的示例旨在向你显示给定邮政编码在某个国家/地区的当前温度,每隔x分钟显示一次。这些信息是从Unisys公司提供的网络服务获得的。这个想法是,温度将显示在CRT上给定的时间段内。为了从用户那里获取这个时间段,我考虑使用命令行作为应用程序和最终用户之间的通道。

这是程序的语法

Forecast.exe /u10 /d2 /z95123

其中/u表示每次显示之间的更新间隔(以分钟为单位),/d表示文本在屏幕上停留的时间(以秒为单位),/z表示美国的邮政编码。

因此,上述命令行意味着您希望Forecast显示您加利福尼亚州圣何塞市的天气信息,该信息将每10分钟更新一次,并在屏幕上显示2秒钟。我还尝试在托盘栏中显示一个图标,以便用户可以轻松管理如何退出程序。

最后的话

该程序编写得非常简单,以便您可以轻松地按照源代码了解发生了什么。我在这里给您带来的例子(Forecast)可能没有用,因为可能没有人会每天24小时、每周7天监控给定邮政编码的温度。因此,本文中已经透露的信息仅仅是为了向您展示如何在Win32平台上开发OSD。您可以根据需要操纵程序以提供其他信息。祝你好运!

© . All rights reserved.