Ну и вот сам код: 
 // Включаемые файлы 
 #include <windows.h> 
 #include <stdio.h> 
 #include <stdarg.h> 
 #include <stdafx.h> 
 // Экземпляр главного приложения 
 HINSTANCE g_hInst; // Глобальный дескриптор экземпляра 
 HWND g_hWnd; // Глобальный дескриптор окна 
 // Размеры окна приложения, его тип, класс и заголовок 
 #define WNDWIDTH 400 
 #define WNDHEIGHT 400 
 #define WNDTYPE WS_OVERLAPPEDWINDOW 
 const char g_szClass[] = "FrameClass"; 
 const char g_szCaption[] = "FrameCaption"; 
 // Главные прототипы функци приложения 
 // Точка входа 
 int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev, 
 LPSTR szCmdLine, int nCmdShow); 
 // Функция для отображения сообщений об ошибках 
 void AppError(BOOL Fatal, char *Text, ...); 
 // Процедура обработки ссобщений 
 long FAR PASCAL WindowProc(HWND hWnd, UINT uMsg, 
 WPARAM wParam, LPARAM lParam); 
 // Функции для регистрации и отмены регистрации классов 
 BOOL RegisterWindowClasses(HINSTANCE hInst); 
 BOOL UnregisterWindowClasses(HINSTANCE hInst); 
 // Функция для создания окна приложения 
 HWND CreateMainWindow(HINSTANCE hInst); 
 // функции для инициализации, завершения работы и обработки кадров 
 BOOL DoInit(); 
 BOOL DoShutdown(); 
 BOOL DoPreFrame(); 
 BOOL DoFrame(); 
 BOOL DoPostFrame(); 
 int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev, 
 LPSTR szCmdLine, int nCmdShow) 
 { 
 MSG Msg; 
 // сохраняем экземпляр приложения 
 g_hInst = hInst; 
 // Регистрация класса окна 
 // Возвращаем управление, если не удалась 
 if(RegisterWindowClasses(hInst) == FALSE) 
 return FALSE; 
 // Создание окна 
 // Возвращаем управление, если не удалось 
 if((g_hWnd = CreateMainWindow(hInst)) == NULL) 
 return FALSE; 
 // Инициализация приложения 
 // Возвращаемся в случае ошибки 
 if(DoInit() == TRUE) { 
 // Вход в цикл обработки сообщений 
 ZeroMemory(&Msg, sizeof(MSG)); 
 while(Msg.message != WM_QUIT) { 
 // Обработка сообщений Windows (если они есть) 
 if(PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) { 
 TranslateMessage(&Msg); 
 DispatchMessage(&Msg); 
 } else { 
 // Предкадровая обработка, 
 // прекращаем обработку кадра, 
 // если вернули FALSE 
 if(DoPreFrame() == FALSE) 
 break; 
 // Обработка кадра, 
 // прекращаем обработку, 
 // если вернули FALSE 
 if(DoFrame() == FALSE) 
 break; 
 // Послекадровая обработка, 
 // прекращаем обработку кадра, 
 // если вернули FALSE 
 if(DoPostFrame() == FALSE) 
 break; 
 } 
 } 
 } 
 // Функции завершения работы 
 DoShutdown(); 
 // Отменяем регистрацию класса окна 
 UnregisterWindowClasses(hInst); 
 return TRUE; 
 } 
 BOOL RegisterWindowClasses(HINSTANCE hInst) 
 { 
 WNDCLASSEX wcex; 
 // Создание и регистрация класса окна 
 wcex.cbSize = sizeof(wcex); 
 wcex.style = CS_CLASSDC; 
 wcex.lpfnWndProc = WindowProc; 
 wcex.cbClsExtra = 0; 
 wcex.cbWndExtra = 0; 
 wcex.hInstance = hInst; 
 wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); 
 wcex.hCursor = LoadCursor(NULL, IDC_ARROW); 
 wcex.hbrBackground = NULL; 
 wcex.lpszMenuName = NULL; 
 wcex.lpszClassName = g_szClass; 
 wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION); 
 if(!RegisterClassEx(&wcex)) 
 return FALSE; 
 return TRUE; 
 } 
 BOOL UnregisterWindowClasses(HINSTANCE hInst) 
 { 
 // Отмена регистрации класса окна 
 UnregisterClass(g_szClass, hInst); 
 return TRUE; 
 } 
 HWND CreateMainWindow(HINSTANCE hInst) 
 { 
 HWND hWnd; 
 // Создание главного окна 
 hWnd = CreateWindow(g_szClass, g_szCaption, 
 WNDTYPE, 0, 0, WNDWIDTH, WNDHEIGHT, 
 NULL, NULL, hInst, NULL); 
 if(!hWnd) 
 return NULL; 
 // Отображение и обновление окна 
 ShowWindow(hWnd, SW_NORMAL); 
 UpdateWindow(hWnd); 
 // Возвращаем дескриптор окна 
 return hWnd; 
 } 
 void AppError(BOOL Fatal, char *Text, ...) 
 { 
 char CaptionText[12]; 
 char ErrorText[2048]; 
 va_list valist; 
 // Создаем заголовок окна сообщения 
 // на основе флага Fatal 
 if(Fatal == FALSE) 
 strcpy(CaptionText, "Error"); 
 else 
 strcpy(CaptionText, "Fatal Error"); 
 // Создаем текст сообщения 
 va_start(valist, Text); 
 vsprintf(ErrorText, Text, valist); 
 va_end(valist); 
 // Отображаем окно сообщений 
 MessageBox(NULL, ErrorText, CaptionText, 
 MB_OK | MB_ICONEXCLAMATION); 
 // Отправляем сообщение о завершении работы приложения, 
 // если ошибка является фатальной 
 if(Fatal == TRUE) 
 PostQuitMessage(0); 
 } 
 // Процедура обработки сообщений - обрабатывает только 
 // сообщение о завершении работы приложения 
 long FAR PASCAL WindowProc(HWND hWnd, UINT uMsg, 
 WPARAM wParam, LPARAM lParam) 
 { 
 switch(uMsg) { 
 case WM_DESTROY: 
 PostQuitMessage(0); 
 return 0; 
 } 
 return DefWindowProc(hWnd, uMsg, wParam, lParam); 
 } 
 BOOL DoInit() 
 { 
 // Здесь выполняются функции инициализации приложения, 
 // такие как инициализация графической системы, сети, звука и т.д. 
 // Возвращает TRUE в случае успешной инициализации и FALSE при ошибке. 
 return TRUE; 
 } 
 BOOL DoShutdown() 
 { 
 // Здесь выполняются действия, завершающие работу приложения, 
 // такие как отключение график, звука и т.д. Возвращает TRUE 
 // в случае успешного завершения работы и FALSE при ошибке. 
 return TRUE; 
 } 
 BOOL DoPreFrame() 
 { 
 // Выполняет подготовку к формированию кадра, например, 
 // установку таймера. Возвращает TRUE в случае успешной 
 // подготовки и FALSE при ошибке. 
 return TRUE; 
 } 
 BOOL DoFrame() 
 { 
 // Выполняет операции формирования кадра, такие как визуализация. 
 // Возвращает TRUE при успехе и FALSE при ошибке. 
 return TRUE; 
 } 
 BOOL DoPostFrame() 
 { 
 // Выполняет посткадровую обработку, например, 
 // синхронизацию со временем и т.д. 
 // Возвращает TRUE при успехе и FALSE при ошибке. 
 return TRUE; 
 }