WinMain Function
int PASCAL
WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCommandLine,
int cmdShow)
{
WNDCLASS wndClass;
HWND hwnd;
MSG msg;
USE_PARAM(hPrevInstance);
// Record the instance handle.
hAppInstance = hInstance;
// Very simple command-line processing. We only have one
// option - debug - so we will just assume that if anything was
// specified on the command line the user wants debug mode.
// (In debug mode there is no hardware and all surfaces are
// explicitly in system memory.)
if (0 != *lpszCommandLine)
fDebug = TRUE;
// Register the window class.
wndClass.style = 0;
wndClass.lpfnWndProc = WndProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hInstance = hInstance;
wndClass.hIcon = LoadIcon(hAppInstance,
MAKEINTRESOURCE(IDI_APPICON));
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndClass.hbrBackground = GetStockObject(WHITE_BRUSH);
wndClass.lpszMenuName = NULL;
wndClass.lpszClassName = WINDOW_CLASSNAME;
RegisterClass(&wndClass);
// Create the main window of the instance.
hwnd = CreateWindow(WINDOW_CLASSNAME,
WINDOW_TITLE,
WS_OVERLAPPED | WS_SYSMENU,
CW_USEDEFAULT, CW_USEDEFAULT,
WINDOW_WIDTH, WINDOW_HEIGHT,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd, cmdShow);
UpdateWindow(hwnd);
// The main message dispatch loop.
// NOTE: For simplicity we handle the message loop with a
// simple PeekMessage scheme. This might not be the best
// mechanism for a real application (a separate render worker
// thread might be better).
while (TRUE)
{
if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
{
// Message pending. If it's QUIT then exit the message
// loop. Otherwise, process the message.
if (WM_QUIT == msg.message)
{
break;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
// Animate the scene.
OnIdle(hwnd);
}
}
return msg.wParam;
}