数字时钟LCD控制开发指南

在数字钟表或嵌入式系统中,经常看到七段LCD显示。本文将介绍如何创建一个简单的控制,通过鼠标拖动数字来快速设置日期和时间。这种控制不仅外观类似于数字钟表,而且使用起来非常简单,部署时也不需要安装额外的字体或进行特殊的安装。

开发者希望创建一个易于使用且易于部署的控件,以便用户能够通过拖动鼠标快速设置日期和时间。这种控件的设计灵感来自于数字时钟,同时确保其简单易用,无需安装额外的字体或执行特殊的安装过程。

使用代码

Clcd7类是整个控制的核心。演示应用程序包含了一个完全功能的设置时间的演示控制,其中LCD用于设置时间(应用程序本身只是将结果放入编辑框中):

Clcd7 hour1, hour2; Clcd7 minute1, minute2;

在父对话框的IntDialog()函数中,可以设置操作参数,例如:

m_lcd.SetBgColor(RGB(192, 192, 192)); m_lcd.SetFgColor(RGB(12, 12, 12));

LCD将向其父对话框发送以下消息:

#define WM_OVERFLOW (WM_USER + 1) #define WM_UNDERFLOW (WM_USER + 2) #define WM_TCHANGE (WM_USER + 3)

确保这些消息在应用程序中是唯一的,或者使用RegWndMsg。要捕获这些消息,请使用:

BEGIN_MESSAGE_MAP(CTimectrlDlg, CDialog) //{{AFX_MSG_MAP(CTimectrlDlg) ... ON_MESSAGE(WM_TCHANGE, lcd_change) ... //}}AFX_MSG_MAP END_MESSAGE_MAP

要捕获消息:

void CTimectrlDlg::lcd_change(WORD wparam, LONG lparam) { TRACE("lcd change on %d\r\n", wparam); }

wparam包含发送消息的LCD的控件ID。

感兴趣的要点

开发者使用了Windows消息机制,在LCD发生变化时发送消息。这使得更新UI反馈和更新显示当前数字的编辑框的代码非常简单。

溢出或下溢消息可以用来非常简单地将多个LCD连接在一起。原理如下:

if (pMsg->message == WM_OVERFLOW) { TRACE("CTimectrlDlg::PreTranslateMessage WM_OVERFLOW on %d\r\n", pMsg->wParam); if (pMsg->wParam == CONTROL_FOR_LOWER_DIGIT) { // m_lcd2是CONTROL_FOR_HIGHER_DIGIT m_lcd2.num++; m_lcd.Invalidate(); } }

同样的方法也适用于UNDERFLOW。当Invalidate()被调用时,如果发生溢出,控件可能会发送消息。这允许级联多个LCD。

要将LCD设置为十六进制模式,请使用:

// Hex Mode: SetMinMax(0, 15); // Dec Mode: SetMinMax(0, 9);

开发者还安排了对控件参数的设置,使其对Windows创建状态敏感。这样,可以在预创建状态下设置参数,而不会用ASSERT破坏整个系统。

void Clcd7::SetBgColor(COLORREF col) { bg = col; if (::IsWindow(m_hWnd)) Invalidate(); }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485