2

ウィンドウを作成した後、タイマーを開始してsthを実行しました。次のようなコード:

SetTimer(hWnd, 1, 40, NULL);  //tick each 40 ms.

最後のエラーは 0 でしたが、wm_timer を受信できません! 次のようなコード:

case WM_TIMER:
{
     //...
}

私のIDEはVS2010、OSはWindows7なのですが、使用環境に特殊なケースはありますか?

PS OK、さらにコードを提供します。これはwin32アプリなので、WinMainで:

HWND hWnd = CreateWindow(...);  //style : WS_POPUP | WS_VISIBLE , return is good
SetTimer(hWnd, 1, 40, NULL);    //return is good too.
while (GetMessage(&msg, NULL, 0, 0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}

と WndProc:

switch(message)
{
case WM_TIMER:
{
    DebugBreak();  //no reaction
}
break;
.......
}
4

3 に答える 3

2

WM_TIMER他のメッセージの消費に失敗した場合は、それらが優先されるため、起動しません。その原因の 1 つは、たとえば、WM_PAINTメッセージが正しく処理されていないことです (必ずBeginPaint()/を実行してくださいEndPaint()) 。

于 2012-12-26T23:30:06.830 に答える
1

私の記憶の限りでは、問題は SetTimer の呼び出しが早すぎたことが原因です。WM_CREATE に配置します。

switch(message)
{
    case WM_CREATE:
    {
        SetTimer(hWnd, 1, 40, NULL);
    }
    case WM_TIMER:
    {
        DebugBreak();  //no reaction
    }
    break;
    .......
}

これが誤動作する理由は他にありません。

于 2012-12-16T10:21:44.287 に答える