Visual Studio .NET 2002Visual C++ 7.1Visual Studio 6Visual C++ 7.0DBAVisual Studio .NET 2003Windows 2000Visual C++ 6.0Windows XPMFCIntermediateDevVisual StudioWindowsC++
CLEDScreen 类 - 带透明度的 LED 数字屏






4.17/5 (8投票s)
Jan 13, 2005
2分钟阅读

84992

4273
一个派生自 CStatic 的带有透明度的数字 LED 屏幕。 基于 Jason Hattingh 的 “CStaticTime class”。
引言
首先,请原谅我糟糕的英语。
我长期以来都在寻找这样一个类,它允许我在我的程序中模拟漂亮的数字屏幕。 类 CStaticTime
(作者 Jason Hattingh, 一个 LED 时间和值显示控件)看起来比其他的更好。 但是在这个类中,没有机会设置透明度,也没有我需要的许多函数。 因此,我大大改变了类 CStaticTime
,新的类 CLEDScreen
与原始类只有少数相似之处。
想法
对于大多数简单的情况,对我来说,实现透明度就是使用函数 TransparentBlt()
。 我拒绝直接在窗口上绘图,而是应用了在内存中绘图(“背景画布”)。
在内存中初始化一个类时,会创建“就绪符号的仓库”(symbDC
)和“背景画布”(backDC
)。 在更改 LEDScreen
的内容期间,该类从 symbDC
中获取必要的就绪符号并将其传输到 backDC
。 当需要更新窗口时,该类获取 backDC
的内容并使用 TransparentBlt()
将其传输到窗口。
如何使用
使用该类非常简单。
- 创建项目。
- 将库 msimg32.lib 链接到项目。
- 将 LEDScreen 源文件添加到项目。
- 在对话框上放置任何位图图像(图片静态)。 这是可选的。
- 在对话框上放置(如果存在所有者位图)
CStatic
。 使用 ClassWizard,为此CStatic
创建变量m_screen
。 - 在您的对话框声明中,将
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 ... }
- 将对象
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); ... }
- 使用函数
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)
- 添加了长内容的滚动
- 减少了闪烁