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

模拟时钟

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.85/5 (48投票s)

2003年1月7日

1分钟阅读

viewsIcon

148366

downloadIcon

3524

为您的项目添加模拟时钟 (CStatic 派生控件创建教程)

Analog Clock

引言

本文档描述了如何添加一个静态控件来显示一个模拟时钟。该控件是从 CStatic 派生的。首先,将 Clock.hClock.cpp 文件添加到您的项目中。从工作区窗口中选择“资源”选项卡,然后选择要添加模拟时钟的对话框。从控件工具箱中选择“静态控件”并在对话框上绘制它(图 1)。将其 ID 从 IDC_STATIC 更改为 IDC_CLOCK


Add Static Control on your dialog
图 1 - 将静态控件添加到您的对话框。

现在是时候将成员变量添加到您的对话框类了。使用“类向导”来完成它。图 2 和 3 向您展示了如何操作。在这种情况下,我们添加了一个名为 m_Clock 且类型为 CStatic 的成员变量。

Add member variable to your dialog class
图 2 - 将成员变量添加到您的对话框类。

Class Wizard
图 3 - 类向导

好的,打开您的对话框类头文件,在类定义顶部添加以下行

#include "Clock.h"

然后,将 CStatic m_Clock; 更改为 CClock m_Clock;。现在您的对话框定义如下所示

// 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_)

成员函数

CClock 类只有 2 个成员函数。一个用于设置时钟指针颜色,另一个用于获取时钟指针颜色,如下所示

void SetHandColor(COLORREF color);

例如:

COLORREF color;
color=RGB(0, 0, 255);    //Blue
m_Clock.SetHandColor(color);
COLORREF GetHandColor();

例如:
COLORREF color;
color=m_Clock.GetHandColor();    //Get color

现在,一切准备就绪了!

注意

部分代码来自 Jeff Prosise 的书(Programming with MFC - MSPress)。Jeff 的代码在 CView 派生类中绘制一个模拟时钟,我将其更改为 CStatic 派生类。此代码还有一个区别,如果您更改时间(控制面板,日期/时间),Jeff 的代码无法识别新的时间。我更改了他的代码,以便它可以实时识别新的时间!

© . All rights reserved.