分类: C/C++
2008-09-14 21:03:09
Clock is a simple program in C++ which shows the current local time in a transparent window. When time changes the window region changes as well using only the area necessary for displaying time. Instead of setting a timer to read time, the program uses a thread which posts a WM_CLOCKTIMETICK
message each second.
Program displays time in 4 LEDs as shown in the following image:
Each LED consists of 7 lines so we need an array of 4 * 7 = 28 elements to describe each line. Each element shows the starting position of the corresponding line and how this is going to be drawn, horizontally or vertically.
// structure that describes each element typedef struct _MZDrawObj { int xPos; // x-coordinate int yPos; // y-coordinate char cType; // 1: horizontaly, 2: verticaly } MZDrawObj; // array for describing each line MZDrawObj m_obj[4][7];
We also need to represent each hour (0 to 23) and minute (0 to 59) with the respective lines that will be drawn. In order to achieve this I use an array of 24 elements (WORD m_objHour[24]
) for the first 2 LEDs (hour LEDs) and another one of 60 elements (WORD m_objMin[60]
) for the last 2 LEDs (minute LEDs). Each element describes exactly which lines will be drawn (7 bits for each LED).
0 0
***** *****
* * * *
5 * * 1 5 * * 1
* 6 * * 6 *
***** *****
* * * *
4 * * 2 4 * * 2
* * * *
***** *****
3 3
1st BYTE 2nd BYTE
InitDrawObj
initializes array elements.
DrawObj
draws the specified m_obj
element.
DrawHour
draws the specified m_objHour
element (hour LEDs).
DrawMin
draws the specified m_objMin
element (minute LEDs).
DrawDot
draws the separator dot between hour leds and minute leds. It is called twice.
DrawTime
does the whole drawing. Variable HRGN m_hWndRgn
defines window region. Function DefineWndRegion
reads local time and creates window region. When time changes window region changes as well.
Thread function TimeTickThread
posts a message each second which calls OnTimeTick
responsible for changing window region and drawing the window.
Source code is free for anyone who might find it interested.