如何在mfc界面上添加倒计时定时器?

/icetool/other/iceCal24.rar

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);

}