2015-10-15 52 views
0

我已經設置了一個消息循環。SetTimer返回非零,但它不是我提供的id,並且我的回調從不觸發

我打電話SetTimer這樣的:

SetTimer(null, 5, 1000, timerFunc_c); 

這樣做的返回值是像11422一個隨機數。它永遠不會觸發我的回調。如果我設定的計時是這樣的:

SetTimer(msgWinHwnd, 5, 1000, timerFunc_c); 

然後返回0,然後它使GetMessage 0的最小值和最大值,與WM_TIME消息旅行,但是我的回調不會被調用。

你知道爲什麼在第一種情況下我的回調沒有返回我告訴它的ID嗎?爲什麼它永遠不會觸發回調?

由於

回答

1

這是documented behaviour for the SetTimer function

nIDEvent [IN]

類型:UINT_PTR

非零計時器標識符。如果的hWnd 參數爲NULL,並且nIDEvent不匹配現有的計時器 則忽略併產生

一個新的計時器ID如果你的回調還沒有被調用(這是很難說肯定從你的問題),請檢查您GetMessage循環,並確保你沒有指定窗口過濾器(例如,你應該叫GetMessage(&msg, 0, ...);而非GetMessage(&msg, msgWinHwnd, ...);

+0

啊感謝喬納森!我的GetMessage被調用'的GetMessage(味精,msgWinHwnd,0 ,0)'但即使當我將GetMessage設置爲空hwnd時,它不會觸發回調,它只是觸發WM_TIMER事件,我注意到一些有趣的事情,我的'DispatchEvent' i不會觸發我的msgWinHwnd的'WNDPROC',這是正常的嗎? – Noitidart

相關問題