What I posted above is not my message loop, it is a part of my WinProc function.
// Process the Messages
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
WinInput *pInput = NULL;
if(message == WM_NCCREATE)
{
pInput = reinterpret_cast<WinInput *>(((LPCREATESTRUCT)lParam)->lpCreateParams);
SetLastError(0);
if(SetWindowLongPtr(hWnd, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(pInput)) == 0)
{
const DWORD ErrorCode(GetLastError());
if(ErrorCode != 0)
{
return FALSE;
}
}
}
else
{
pInput = reinterpret_cast<WinInput *>(GetWindowLong(hWnd, GWL_USERDATA));
}
switch(message)
{
case WM_SYSCOMMAND:
switch (wParam)
{
// Disables System Menu (F10 Key)
case SC_KEYMENU:
return 0;
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_CHAR:
pInput->PushInputChar(wParam);
break;
case WM_MOUSEMOVE:
break;
case WM_LBUTTONDOWN:
break;
case WM_LBUTTONUP:
break;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
This is my message loop
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if(msg.message == WM_QUIT)
return FALSE;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
which is called once a frame.