动态 LED 控件






4.20/5 (8投票s)
2002年7月30日
3分钟阅读

152626

7670
一个闪烁的 LED 风格控件。
引言
这个类使用户可以对每秒的闪烁速率进行控制,从而实现闪烁效果。 他们可以设置控件的计时器。 有时候,最好通过 LED 控件来显示正在进行的操作的状态,或者如果有任何警告,最好使用 LED 控件来显示。 我在为客户开发时遇到了这种情况,他们的最终用户是保安,他们不懂电脑。 所以,他们的界面被设计成类似电视遥控器的样子,我不得不加入很多这样的控件,以使他们感到轻松。 我想告诉那些将要使用这个类的人,它最适合用于小型控件,而不是把它做得更大,那样效果就会丢失。 在更大的比例下,它看起来更像一个椭圆而不是一个 LED。
实现
要使用CDynamicLED
类,您可以按照下面所述的指南进行操作。- 插入一个新的静态框架,您希望放置 LED 的地方。 为其设置客户端边缘属性或模态框架属性看起来更好。
- 将静态框架重命名为
IDC_STATIC
以外的其他名称。 将其命名为类似IDC_DYN_LED
的名称。 - 使用 MFC ClassWizard,为
IDC__DYN_LED
添加一个新的成员变量。 类别应该是 控件,变量类型应该是CDynamicLED
。 如果CDynamicLED
类型没有出现在 变量类型下拉组合框中,那么您需要重新创建 .clw 文件。 删除 .clw 文件 并再次运行类向导。 - 请记住在您的对话框的头文件中添加 "DynamicLED.h"。
操作
CDynamicLED
类中的各种功能概述如下。-
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 以正常速度闪烁,即每秒闪烁一次。
这是您使用此类需要知道的唯一函数。
- 如果需要更多功能来打开或关闭 LED,您有 2 个函数,名为
SwitchOn
和SwitchOff
这 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