我是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所说的应该执行的操作。 如果有人可以解释这个或我做错了什么,请做。
答案 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来跳转到代码块的末尾。