2015-06-23 27 views
3

我设置了这个代码,所以我可以有一个扫雷游戏的计时器,但我无法得到它编译。使用Settimer()for MFC应用程序时出现问题

void CALLBACK CMineSweeperBoard::clock(HWND hwnd, UINT uMsg, UINT timerId, DWORD dwTime) 
{ 
    if (t_seconds < 59){ t_seconds++; } 
    else{ 
    t_minutes++; 
    t_seconds = 0; 
    } 
} 

void CMineSweeperBoard::timer(void) 
{ 
    MSG msg; 

    SetTimer(NULL, 0, 1000, (TIMERPROC) &clock); 
    while (GetMessage(&msg, NULL, 0, 0)) { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
} 

这个问题似乎与设置计时器功能的参数,但我找不出它是什么,任何帮助将不胜感激。

+1

编译器已经告诉过你在添加(TIMERPROC)强制转换之前做了什么错误。添加演员只是关闭它,它并没有让你做得正确。改为处理WM_TIMER消息。 –

回答

4

您需要SetTimer,KillTimerON_WM_TIMER()。见例如在这个页面的底部: https://msdn.microsoft.com/en-us/library/49313fdf.aspx

不要把消息循环中有While(GetMessage()...)

可以启动1秒计时器通过调用SetTimer(1, 1000, NULL);然后加入ON_WM_TIMER()到消息映射,这将结果传递给void CMyWnd::OnTimer(UINT nIDEvent)这样你就不需要定义自己的TimerProc

或者您也可以提供自己的TimerProc,但是功能的TimerProc将必须声明为static 。这可能是不方便的,因为静态成员函数不能访问成员数据。相反,使用WM_TIMER会更容易。

相关问题