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

动态 LED 控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.20/5 (8投票s)

2002年7月30日

3分钟阅读

viewsIcon

152626

downloadIcon

7670

一个闪烁的 LED 风格控件。

Sample Image - DynLEDSnapShot.jpg

引言

这个类使用户可以对每秒的闪烁速率进行控制,从而实现闪烁效果。 他们可以设置控件的计时器。 有时候,最好通过 LED 控件来显示正在进行的操作的状态,或者如果有任何警告,最好使用 LED 控件来显示。 我在为客户开发时遇到了这种情况,他们的最终用户是保安,他们不懂电脑。 所以,他们的界面被设计成类似电视遥控器的样子,我不得不加入很多这样的控件,以使他们感到轻松。 我想告诉那些将要使用这个类的人,它最适合用于小型控件,而不是把它做得更大,那样效果就会丢失。 在更大的比例下,它看起来更像一个椭圆而不是一个 LED。

实现

要使用 CDynamicLED 类,您可以按照下面所述的指南进行操作。
  1. 插入一个新的静态框架,您希望放置 LED 的地方。 为其设置客户端边缘属性或模态框架属性看起来更好。
  2. 将静态框架重命名为 IDC_STATIC 以外的其他名称。 将其命名为类似 IDC_DYN_LED 的名称。
  3. 使用 MFC ClassWizard,为 IDC__DYN_LED 添加一个新的成员变量。 类别应该是 控件,变量类型应该是 CDynamicLED。 如果 CDynamicLED 类型没有出现在 变量类型下拉组合框中,那么您需要重新创建 .clw 文件。 删除 .clw 文件 并再次运行类向导。
  4. 请记住在您的对话框的头文件中添加 "DynamicLED.h"。

操作

CDynamicLED 类中的各种功能概述如下。
  1. SetLED(CWnd *pWnd, UINT nIDColor, UINT nIDShape, int nTimerInterval)

    其中 pWnd 是您希望放置 LED 的静态窗口,nIDColor 可以是以下任何值

    ID_LED_RED
    ID_LED_GREEN
    ID_LED_BLUE
    ID_LED_YELLOW

    NIDShape 可以是以下任何值

    ID_SHAPE_ROUND
    ID_SHAPE_SQUARE

    这里,nIDShape 值确定 LED 的形状是圆形还是方形。

    并且 nTimerInterval 参数表示毫秒数。 LED 将在该参数表示的每个周期闪烁一次。 您可以通过将此参数设置为 100 来使 LED 快速闪烁,或者通过将此值设置为 1000 来使 LED 以正常速度闪烁,即每秒闪烁一次。

    这是您使用此类需要知道的唯一函数。

  2. 如果需要更多功能来打开或关闭 LED,您有 2 个函数,名为

    SwitchOnSwitchOff

    这 2 个函数不需要任何参数。

现在让我们来看看这个控件在您基于对话框的应用程序中的实现。

我假设您已将对话框类命名为 CMyDialog

请记住,您已经为这个静态框架创建了一个变量。 如果您忘记了这一点,请参考上面的实现部分。 假设您已将您的变量命名为 m_dynLEDRed,对于一个形状为圆形、每半秒闪烁一次且颜色为红色的 LED 控件。

您必须在您的 OnInitDialog 函数中添加以下几行。 我还假设您已将您的静态框架命名为 IDC_STATIC_LED_RED

CWnd *pWndRed = (CWnd *)GetDlgItem(IDC_STATIC_LED_RED);
m_dynLEDRed.SetLED(pWndRed,ID_LED_RED,ID_SHAPE_ROUND,500); 
如果我希望在运行时将 LED 的闪烁间隔从半秒更改为整秒,那么您可以使用以下代码。
// Change the time interval of the LED to 1000
CWnd *pWndRed = (CWnd *)GetDlgItem(IDC_STATIC_LED_RED);
m_dynLEDRed.SetLED(pWndBlue,ID_LED_BLUE, ID_SHAPE_ROUND,1000);
要将 LED 的形状从圆形更改为方形,反之亦然,您可以按照这段代码操作。
// Change the shape of the Blue LED from round to square
CWnd *pWndRed  = (CWnd *)GetDlgItem(IDC_STATIC_LED_RED);
m_dynLEDRed.SetLED(pWndBlue,ID_LED_BLUE, ID_SHAPE_SQUARE,1000);
如果您想关闭 LED(我的意思是将其关闭),您可以使用这个。
// Switch OFF the Red LED
CWnd *pWndRed = (CWnd *)GetDlgItem(IDC_STATIC_LED_RED);
m_dynLEDRed.SwitchOff();
然后再次打开它,使用
// Switch ON the Red LED
CWnd *pWndRed = (CWnd *)GetDlgItem(IDC_STATIC_LED_RED);
m_dynLEDRed.SwitchOn();

就这样,各位。 祝您好运,玩得开心。

诚挚的问候,
V.Girish

© . All rights reserved.