为什么RESTORED,MINIMIZED,MAXIMIZED通知都应该在不应该发送时发送?

时间:2014-08-08 22:33:51

标签: c winapi resize messaging

我是C的新手(仅3个月),我已经进入Windows编程。使用它后,我尝试响应WM_SIZE消息。在一个简单的程序中,我的WndProc()看起来像这样:

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch(msg) {
  case WM_SIZE:
    switch(wParam) {
      case SIZE_MINIMIZED:
           MessageBox(NULL, "You minimized the window!", "Minimized", MB_ICONEXCLAMATION | MB_OK);
      case SIZE_MAXIMIZED:
           MessageBox(NULL, "You maximized the window!", "Maximized", MB_ICONEXCLAMATION | MB_OK);
      case SIZE_RESTORED:
           MessageBox(NULL, "You restored the window!", "Restored", MB_ICONEXCLAMATION | MB_OK);
    }
}

我希望在正确的时间弹出正确的消息,所以当我最小化窗口时,"最小化" MessageBox应该弹出。

相反,当我最小化窗口时,会弹出所有三个消息框,首先是最小化消息框,然后是最大化,然后恢复。将弹出还原消息框以显示所有这些消息框,这不是Microsoft documentation所说的应该执行的操作。 如果有人可以解释这个或我做错了什么,请做。

1 个答案:

答案 0 :(得分:1)

每个案例后你需要break

  case SIZE_MINIMIZED:
       MessageBox(NULL, "You minimized the window!", "Minimized", MB_ICONEXCLAMATION | MB_OK);
       break;
  case SIZE_MAXIMIZED:
       MessageBox(NULL, "You maximized the window!", "Maximized", MB_ICONEXCLAMATION | MB_OK);
       break;
  case SIZE_RESTORED:
       MessageBox(NULL, "You restored the window!", "Restored", MB_ICONEXCLAMATION | MB_OK);
       break;

在循环和switch语句中使用break来跳转到代码块的末尾。