Here is how I've always done it. (It's very close to Vicious' example).
Code:
CGame myGame;
// All that windows stuff that is necessary goes here
myGame.Initialize(); // perform initialization to game objects, and openGL/directX
while(!done)
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if (msg.message==WM_QUIT)
{
done=true;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
delta = calculateDelta();
myGame.Render(delta);
}
}
myGame.Close();
I create an object (CGame in the above code) to do all the game related stuff. That way it is easy to separate it from the windows initialization stuff. The delta parameter that is passed to the render function is the time elapsed since the last time myGame.Render() was called. You will know why this is necessay as you get further into game programming.