Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Analog Clock

0.00/5 (No votes)
6 Jan 2003 1  
Add an analog clock to your project (A tutorial for creating CStatic derived controls)

Analog Clock

Introduction

This article describes how you can add a static control to show an analog clock. This control is derived from CStatic. First of all, add Clock.h and Clock.cpp files to your project. Select Resource tab from Workspace window, and select your dialog that you want to add an analog clock. Select Static Control from Control Toolbox and draw it on dialog (Figure 1). Change it's ID from IDC_STATIC to IDC_CLOCK.


Add Static Control on your dialog
Figure 1 - Add Static Control to your dialog.

Now it's time to add a member variable to your dialog class. Call Class Wizard to do it for you. Figure 2 and 3 show you it. In this case we add a member variable m_Clock with type CStatic.

Add member variable to your dialog class
Figure 2 - Add member variable to your dialog class.

Class Wizard
Figure 3 - Class Wizard

Ok, open your dialog class header file, add this line on top of your class definition:

#include "Clock.h"

Then, change CStatic m_Clock; to CClock m_Clock;. Now your dialog definition, looks like this:

// AnalogClockDlg.h : header file

//


#if !defined(AFX_ANALOGCLOCKDLG_H__D5D048D5_079A_
    40BD_86A0_32A26253D2E5__INCLUDED_)
#define AFX_ANALOGCLOCKDLG_H__D5D048D5_079A_40BD_
    86A0_32A26253D2E5__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


#include "Clock.h"

///////////////////////////////////////////////////////////

// CAnalogClockDlg dialog


class CAnalogClockDlg : public CDialog
{
// Construction

public:
  CAnalogClockDlg(CWnd* pParent = NULL);  // standard constructor


// Dialog Data

  //{{AFX_DATA(CAnalogClockDlg)

  enum { IDD = IDD_ANALOGCLOCK_DIALOG };
  CClock  m_Clock;    //We change it from CStatic m_Clock; 

                            //to CClock m_Clock;

  //}}AFX_DATA


  // ClassWizard generated virtual function overrides

  //{{AFX_VIRTUAL(CAnalogClockDlg)

  protected:
  virtual void DoDataExchange(CDataExchange* pDX);  
           // DDX/DDV support

  //}}AFX_VIRTUAL


// Implementation

protected:
  HICON m_hIcon;

  // Generated message map functions

  //{{AFX_MSG(CAnalogClockDlg)

  virtual BOOL OnInitDialog();
  afx_msg void OnPaint();
  afx_msg HCURSOR OnQueryDragIcon();
  //}}AFX_MSG

  DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}

// Microsoft Visual C++ will insert additional declarations 

// immediately before the previous line.


#endif // !defined(AFX_ANALOGCLOCKDLG_H__D5D048D5_079A_40BD_

            //86A0_32A26253D2E5__INCLUDED_)

Member Functions

Class CClock has only 2 member functions. One for setting clock hand color and other to get clock hand color as below:

void SetHandColor(COLORREF color);

e.g.:

COLORREF color;
color=RGB(0, 0, 255);    //Blue

m_Clock.SetHandColor(color);
COLORREF GetHandColor();

e.g.:
COLORREF color;
color=m_Clock.GetHandColor();    //Get color

Now, every thing is ready!

Note

Part of code is obtained from Jeff Prosise Book (Programming with MFC - MSPress). Jeff's code is drawing an analog clock in CView derived class and I changed it to CStatic derived class. This code has another difference, if you change time (Control Panel, Date/Time) Jeff's code can not recognize new time. I change his code to recognize new time on the fly!

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here