I do not understand this. All C programs must start at the main() function, right? But how does Win32 applications change it to using WinMain() instead? Why does it not use main()?

What is happening behind the scenes?

Code:
#include <windows.h>


int WinMain (HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmd, int nShow)
{
    MessageBox(NULL, "Hello, Windows!", "Hello", MB_OK);
}