Разбираю пример. Как можно ветку case засунуть вовнутрь if'а? Разве структурный подход это позволяет? Или case это просто метка в любом месте, лишь бы за границы switch не заходить?
(сам я программирую ПЛК, т.е. C++ только изучаю)
По просьбе модератора:
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
if ( g_IsInitialized )
{
switch (message)
{
case WM_PAINT:
Update();
Render();
break;
case WM_SYSKEYDOWN:
case WM_KEYDOWN:
{
bool alt = (::GetAsyncKeyState(VK_MENU) & 0x8000) != 0;
switch (wParam)
{
case 'V':
g_VSync = !g_VSync;
break;
case VK_ESCAPE:
::PostQuitMessage(0);
break;
case VK_RETURN:
if ( alt )
{
case VK_F11: // <------------------------------
SetFullscreen(!g_Fullscreen);
}
break;
}
}
break;
// The default window procedure will play a system notification sound
// when pressing the Alt+Enter keyboard combination if this message is
// not handled.
case WM_SYSCHAR:
break;
case WM_SIZE:
{
RECT clientRect = {};
::GetClientRect(g_hWnd, &clientRect);
int width = clientRect.right - clientRect.left;
int height = clientRect.bottom - clientRect.top;
Resize(width, height);
}
break;
case WM_DESTROY:
::PostQuitMessage(0);
break;
default:
return ::DefWindowProcW(hwnd, message, wParam, lParam);
}
}
else
{
return ::DefWindowProcW(hwnd, message, wParam, lParam);
}
return 0;
}
Update:
на втором мониторе включил отладку: действительно F11 минует первую точку (игнорирует if).
(у F11 и Alt-Enter одно и то же действие - кто-то спрашивал)