注意:
添加CStatic控件需要设置NOTIFY属性
代码:
1、创建一个CStaticTime类从CStatic类中派生
h文件:
#pragma once
#include "afxwin.h"
class CStaticTime :
public CStatic
{
//控件ID值
enum {
IDC_EDIT_HOUR = 1000,
IDC_EDIT_MIN,
IDC_EDIT_SEC,
IDC_BTN_HOUR_ADD,
IDC_BTN_HOUR_SUBTRACT,
IDC_BTN_MIN_ADD,
IDC_BTN_MIN_SUBTRACT,
IDC_BTN_SEC_ADD,
IDC_BTN_SEC_SUBTRACT,
};
public:
CStaticTime();
virtual ~CStaticTime();
protected:
virtual void PreSubclassWindow();
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
//初始化
void InitTime();
protected:
DECLARE_MESSAGE_MAP()
//窗口大小
afx_msg void OnSize(UINT nType, int cx, int cy);
//按钮单击消息响应函数
afx_msg void OnBtnTimeClicked(UINT nCtrlID);
//文本框数据改变消息响应函数
afx_msg void OnEditChar(UINT nCtrlID);
private:
CEdit *m_pEditTime[3];//0:时1:分2:秒
CButton *m_pBtnTime[6]; //1 2:时的+ - ,3 4:分的+ - , 5 6:秒的+ -
CFont* m_pTimeFont;//显示的字体
public:
//设置/获取时间
void GetTime(__out UINT *pnHour, __out UINT *pnMin, __out UINT *pnSec);
/*
*SetTime 返回值说明
* 0:表示成功
* 1:表示时不是一个有效值(取值范围 0-23)
* 2:表示分不是一个有效值(取值范围 0-59)
* 3:表示秒不是一个有效值(取值范围 0-59)
*/
int SetTime(__in UINT nHour, __in UINT nMin, __in UINT nSec);
};
CPP文件:
#include "stdafx.h"
#include "StaticTime.h"
CStaticTime::CStaticTime()
{
memset(m_pEditTime, NULL, sizeof(m_pEditTime));
memset(m_pBtnTime, NULL, sizeof(m_pBtnTime));
m_pTimeFont = NULL;
}
CStaticTime::~CStaticTime()
{
for (int i = 0; i < (sizeof(m_pEditTime) / sizeof(m_pEditTime[0])); i++)
{
if ( m_pEditTime[i] )
{
m_pEditTime[i]->DestroyWindow();
delete m_pEditTime[i];
m_pEditTime[i] = NULL;
}
}
for (int i = 0; i < (sizeof(m_pBtnTime) / sizeof(m_pBtnTime[0])); i++)
{
if (m_pBtnTime[i])
{
m_pBtnTime[i]->DestroyWindow();
delete m_pBtnTime[i];
m_pBtnTime[i] = NULL;
}
}
if ( m_pTimeFont )
{
delete m_pTimeFont;
m_pTimeFont = NULL;
}
}
BEGIN_MESSAGE_MAP(CStaticTime, CStatic)
ON_WM_SIZE()
ON_CONTROL_RANGE(BN_CLICKED, IDC_BTN_HOUR_ADD, IDC_BTN_SEC_SUBTRACT, &CStaticTime::OnBtnTimeClicked)
ON_CONTROL_RANGE(EN_CHANGE, IDC_EDIT_HOUR, IDC_EDIT_SEC, &CStaticTime::OnEditChar)
END_MESSAGE_MAP()