模拟时钟






2.85/5 (48投票s)
2003年1月7日
1分钟阅读

148366

3524
为您的项目添加模拟时钟 (CStatic 派生控件创建教程)
引言
本文档描述了如何添加一个静态控件来显示一个模拟时钟。该控件是从 CStatic
派生的。首先,将 Clock.h 和 Clock.cpp 文件添加到您的项目中。从工作区窗口中选择“资源”选项卡,然后选择要添加模拟时钟的对话框。从控件工具箱中选择“静态控件”并在对话框上绘制它(图 1)。将其 ID 从 IDC_STATIC
更改为 IDC_CLOCK
。
图 1 - 将静态控件添加到您的对话框。
现在是时候将成员变量添加到您的对话框类了。使用“类向导”来完成它。图 2 和 3 向您展示了如何操作。在这种情况下,我们添加了一个名为 m_Clock
且类型为 CStatic
的成员变量。
图 2 - 将成员变量添加到您的对话框类。
图 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 的代码无法识别新的时间。我更改了他的代码,以便它可以实时识别新的时间!