0

我已将最小化和恢复案例添加到我的平均处理中,但我发现它们从未被击中。

只有在程序启动时Size_Minimized 才会受到影响。之后,最小化大小写永远不会发生。Size_Restore
的情况也永远不会发生。

仅在程序启动时在 Size_Minimize 处停止调试:
图片

我的其他案例有效,所以我不知道为什么最小化和恢复不会触发我的代码或断点。
我得出的结论是Size_Minimized & Size_Restore与我需要的无关。

我需要知道什么来处理最小化/恢复?

代码,以防我做错了:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
    PAINTSTRUCT ps;
    HDC hdc;



    switch(message){
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        EndPaint(hWnd, &ps);
        break;

    case SIZE_MINIMIZED:
        break;

    case SIZE_RESTORED:
        break;

    case WM_SIZING:
    case WM_SIZE:
        if(engine.isReady()) engine.resizeDevice();
        if(engine.isReady()) engine.draw();
        break;

    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }

    return 0;
}
4

1 回答 1

1

SIZE_MINIMIZED并且SIZE_RESTORED是通过消息传递给您的常量WM_SIZE;它们不是窗口消息。每当您的窗口收到与SIZE_MINIMIZED和/或具有相同 id 的窗口消息时,您的断点就会被命中SIZE_RESTORED

你需要让你的代码看起来像这样:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
    PAINTSTRUCT ps;
    HDC hdc;
    switch(message){
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        EndPaint(hWnd, &ps);
        break;


    case WM_SIZE:
        switch(wParam) {
        case SIZE_MINIMIZED:
          // Do whatever
          break;
        case SIZE_RESTORED:
          // Do whatever
          break;
        }
    case WM_SIZING:
        if(engine.isReady()) engine.resizeDevice();
        if(engine.isReady()) engine.draw();
        break;

    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }

    return 0;
}
于 2012-11-27T06:23:33.797 回答