VC/MFC CStatic 绘制一个时间选择控件


注意:

添加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()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值