我设置了这段代码,所以我可以有一个扫雷游戏的计时器,但我无法编译它。

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

问题似乎与 set timer 函数中的参数有关,但我找不到它是什么,任何帮助将不胜感激。

最佳答案

您需要 SetTimerKillTimerON_WM_TIMER() 。请参阅本页底部的示例:
https://msdn.microsoft.com/en-us/library/49313fdf.aspx

不要在那里放置消息循环 While(GetMessage()...)
可以通过调用 SetTimer(1, 1000, NULL); 启动一个 1 秒的定时器,然后将 ON_WM_TIMER() 添加到消息映射中,将结果传递给 void CMyWnd::OnTimer(UINT nIDEvent) 这样就不需要定义自己的 TimerProc

或者您可以提供自己的 TimerProc,但 TimerProc 函数必须声明为 static 。这可能很不方便,因为静态成员函数无法访问成员数据。改用 WM_TIMER 会更容易。

关于c++ - 在 MFC 应用程序中使用 settimer() 时遇到问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31007036/

10-13 07:00