onpaint调用一次某函数,ontimer导致混乱。
头文件中
long WorkHoursCounter;
----------------------------
OnInitDialog()中
SetTimer(IDC_TIMER_SYS, 1000, NULL);
----------------------------
OnPaint() 中
{
UpdateData(TRUE);
CPaintDC dc(this);
showWorkHours();
}
----------------------------
OnTimer(UINT nIDEvent) 中
{
if( nIDEvent == IDC_TIMER_SYS )
{
showWorkHours();
}
CDialog::OnTimer(nIDEvent);
}
----------------------------
showWorkHours()
{
int Second, Min, Hours;
float CurrentHours = 0.00f;//计算当前工作时长
CString WorkHours;//当前工作时长,用于显示
CClientDC dc(this);
CFont myFont1;
myFont1.CreateFont(30, 0, 0, 0 ,700,
FALSE, FALSE, 0,
ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH|FF_SWISS,
_T("Hei "));
dc.SelectObject(&myFont1);
dc.SetTextColor(RGB(0,0,0));
dc.SetBkColor(RGB(0, 230, 230));
if(WorkHoursCounter > 999999) return;
Second = WorkHoursCounter%60;
Min = (WorkHoursCounter/60)%60;
Hours = (WorkHoursCounter/60)/60;
WorkHours.Format(_T("%02d : %02d : %02d"), Hours, Min, Second);
//显示当前工作时长
dc.TextOut(40 + 1 * MaxWinWidth/4, 100 + MaxWinHeight/3*2, WorkHours);
WorkHoursCounter ++;
}
现在出现的问题是
使用
PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM-KEYDOWN && pMsg->wParam==VK_HOME)
dosometing();
Invalidate();
}
只要一重绘,不管是全屏重绘,还是InvalidateRect(); 都会引起WorkHoursCounter变量增加1,哪怕计时器没到1秒。。。
这个如何解决
[解决办法]
将WorkHoursCounter ++;移到OnTimer的响应函数中,
OnTimer(UINT nIDEvent)
{
if( nIDEvent == IDC_TIMER_SYS )
{
showWorkHours();
WorkHoursCounter ++;
}
CDialog::OnTimer(nIDEvent);
}