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

CLEDScreen 类 - 带透明度的 LED 数字屏

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.17/5 (8投票s)

Jan 13, 2005

2分钟阅读

viewsIcon

84992

downloadIcon

4273

一个派生自 CStatic 的带有透明度的数字 LED 屏幕。 基于 Jason Hattingh 的 “CStaticTime class”。

Sample Image - LEDScreen.gif

引言

首先,请原谅我糟糕的英语。

我长期以来都在寻找这样一个类,它允许我在我的程序中模拟漂亮的数字屏幕。 类 CStaticTime(作者 Jason Hattingh, 一个 LED 时间和值显示控件)看起来比其他的更好。 但是在这个类中,没有机会设置透明度,也没有我需要的许多函数。 因此,我大大改变了类 CStaticTime,新的类 CLEDScreen 与原始类只有少数相似之处。

想法

对于大多数简单的情况,对我来说,实现透明度就是使用函数 TransparentBlt()。 我拒绝直接在窗口上绘图,而是应用了在内存中绘图(“背景画布”)。

在内存中初始化一个类时,会创建“就绪符号的仓库”(symbDC)和“背景画布”(backDC)。 在更改 LEDScreen 的内容期间,该类从 symbDC 中获取必要的就绪符号并将其传输到 backDC。 当需要更新窗口时,该类获取 backDC 的内容并使用 TransparentBlt() 将其传输到窗口。

如何使用

使用该类非常简单。

  1. 创建项目。
  2. 将库 msimg32.lib 链接到项目。
  3. LEDScreen 源文件添加到项目。
  4. 在对话框上放置任何位图图像(图片静态)。 这是可选的。
  5. 在对话框上放置(如果存在所有者位图)CStatic。 使用 ClassWizard,为此 CStatic 创建变量 m_screen
  6. 在您的对话框声明中,将 CStatic m_screen 重命名为 CLEDScreen m_screen。 像这样
    // MyDlg.h
    class CMyDlg : public CDialog
    {
     public:
     ...
     // Dialog Data
     //{{AFX_DATA(CMyDlg)
     enum { IDD = IDD_MY_DLG };
     CLEDScreen m_screen;
     ...
     //}}AFX_DATA
     ...
    }
  7. 将对象 m_screen 的初始化代码添加到函数 OnInitDialog(), 像这样
    // MyDlg.cpp
     BOOL CMyDlg::OnInitDialog()
     {
      ...
      m_screen.SetBackWnd(&m_stback); //CStatic m_stback (picture)
    
      m_screen.SetColourForeGround(RGB(0,0,0));
      m_screen.SetColourFaded(RGB(55,136,230));
    
      m_screen.SetRightAlignement();
      m_screen.SetDrawTransparent(true);
      m_screen.SetDrawFaded(true);
      m_screen.SetSymbolParams(0, 5, 0, 2);
      ...
    }
  8. 使用函数 CLEDScreen::Append(CString str) 等。
        CLEDScreen::Append(CString str);
        CLEDScreen::Backspace();
        CLEDScreen::Clear();
        CLEDScreen::StepBack(); //scrolling
        CLEDScreen::StepForward(); //scrolling

待办事项

  • 使用自己的位图代替单独的 CStatic 作为背景图片。

历史

  • 版本 0.1 (2005-01-10)
    • 首次实现。
  • 版本 0.2 (2005-01-19)
    • 添加了右对齐。
    • 更正了绘图过程。
  • 版本 0.3 (2005-01-20)
    • 添加了长内容的滚动
    • 减少了闪烁
© . All rights reserved.