2015-06-23 31 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會更容易。

相關問題