如何在mfc界面上添加倒计时定时器?
Vc6代码
// iceCal24Dlg.h:头文件
//
类CIceCal24Dlg:公共CDialog
{
公共:
int timeValue
int timeID
//构造
公共:
cice cal 24 DLG(CWnd * p parent = NULL);//标准构造函数
//对话数据
//{{AFX_DATA(CIceCal24Dlg)
枚举{ IDD = IDD _ ice cal 24 _ DIALOG };
CString m _ times
CString m _ jishi
//}}AFX_DATA
// ClassWizard生成的虚函数重写
//{{AFX_VIRTUAL(CIceCal24Dlg)
受保护:
虚拟void DoDataExchange(CDATA exchange * pDX);// DDX/DDV支持
//}}AFX_VIRTUAL
//实现
受保护:
HICON m _ hIcon
//生成的消息映射函数
//{{AFX_MSG(CIceCal24Dlg)
虚拟BOOL OnInitDialog();
afx _ msg void OnPaint();
afx _ msg HCURSOR OnQueryDragIcon();
虚拟void OnOK();
虚拟void on cancel();
afx _ msg void on button 1();
afx _ msg void on timer(UINT nIDEvent);
afx _ msg void on button 2();
//}}AFX_MSG
声明消息映射()
};
// iceCal24Dlg.cpp:实现文件
//
#包含" stdafx.h "
#包含“iceCal24.h”
#包含“iceCal24Dlg.h”
#ifdef _DEBUG
#定义新的DEBUG_NEW
#undef THIS_FILE
static char THIS _ FILE[]= _ _ FILE _ _;
#endif
/////////////////////////////////////////////////////////////////////////////
// CIceCal24Dlg对话框
cice cal 24 DLG::cice cal 24 DLG(CWnd * p parent/* = NULL */)
:CDialog(CIceCal24Dlg::IDD,pParent)
{
//{{AFX_DATA_INIT(CIceCal24Dlg)
m _ times = _ T(" 60 ");
m _ Jishi = _ T(" 0 ");
//}}AFX_DATA_INIT
//请注意,LoadIcon不需要Win32中的后续DestroyIcon
m _ hIcon = AfxGetApp()-& gt;load icon(IDR _ MAINFRAME);
}
void cice cal 24 DLG::DoDataExchange(CDATA exchange * pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CIceCal24Dlg)
DDX_Text(pDX,IDC_EDIT1,m _ times);
DDV_MaxChars(pDX,m_times,4);
DDX_Text(pDX,IDC_EDIT2,m _ Jishi);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CIceCal24Dlg,CDialog)
//{{AFX_MSG_MAP(CIceCal24Dlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON _ BN _ CLICKED(IDC _ button 1,OnButton1)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BUTTON2,OnButton2)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CIceCal24Dlg消息处理程序
BOOL CIceCal24Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
//设置该对话框的图标。框架会自动完成这项工作
//当应用程序的主窗口不是对话框时
SetIcon(m_hIcon,TRUE);//设置大图标
SetIcon(m_hIcon,FALSE);//设置小图标
// TODO:在此添加额外的初始化
timeID = 0;
返回TRUE//除非将焦点设置到控件上,否则返回TRUE
}
//如果您在对话框中添加一个最小化按钮,您将需要下面的代码
//绘制图标。对于使用文档/视图模型的MFC应用程序,
//这是框架自动为您完成的。
void CIceCal24Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(这个);//用于绘画的设备上下文
SendMessage(WM_ICONERASEBKGND,(WPARAM) dc。GetSafeHdc(),0);
//在工作区矩形中居中图标
int cxIcon = GetSystemMetrics(SM _ cxIcon);
int cy icon = GetSystemMetrics(SM _ cy icon);
CRect rect
GetClientRect(& amp;rect);
int x = (rect。width()-cxIcon+1)/2;
int y = (rect。height()-cyIcon+1)/2;
//绘制图标
华盛顿。DrawIcon(x,y,m _ hIcon);
}
其他
{
CDialog::OnPaint();
}
}
//系统调用此方法来获取用户拖动时要显示的光标
//最小化的窗口。
HCURSOR cice cal 24 DLG::OnQueryDragIcon()
{
return(HCURSOR)m _ hIcon;
}
void CIceCal24Dlg::OnOK()
{
// TODO:在此添加额外的验证
}
void CIceCal24Dlg::OnCancel()
{
// TODO:在此处添加额外的清理
}
void cice cal 24 DLG::on button 1()
{
// TODO:在此添加控件通知处理程序代码
if(timeID & gt;0)
kill timer(timeID);
CDialog::OnOK();
}
void cice cal 24 DLG::on timer(UINT nIDEvent)
{
// TODO:在此添加您的消息处理程序代码和/或调用default
if(nIDEvent == 6)
{
update data(TRUE);
time value = atoi(m _ Jishi);
time value-;
if(time value & lt;= 0)
{
kill timer(timeID);
timeID = 0;
}
m _吉时。格式(" %d ",time value);
update data(FALSE);
}
CDialog::on timer(nIDEvent);
}
void CIceCal24Dlg::OnButton2()
{
// TODO:在此添加控件通知处理程序代码
update data(TRUE);
timeID = SetTimer(6,1000,NULL);
m _ jishi = m _ times
update data(FALSE);
}