На страницу группы практики...
#include "vg4anim.h"
#define WND_CLASS_NAME "My window class"
VOID SetMyAnim( VOID );
INT CALLBACK MyWindowFunc( HWND hWnd,UINT Msg,
WPARAM wParam, LPARAM lParam );
INT WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
CHAR *CmdLine, INT ShowCmd )
{
WNDCLASS wc;
HWND hWnd;
MSG msg;
SetMyAnim();
wc.style = CS_VREDRAW | CS_HREDRAW;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_ASTERISK);
wc.lpszMenuName = NULL;
wc.hInstance = hInstance;
wc.lpfnWndProc = MyWindowFunc;
wc.lpszClassName = WND_CLASS_NAME;
if (!RegisterClass(&wc))
{
MessageBox(NULL, "Error register window class", "ERROR", MB_OK);
return 0;
}
hWnd =
CreateWindow(WND_CLASS_NAME,
"Title",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hWnd, ShowCmd);
UpdateWindow(hWnd);
while (TRUE)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
if (GetMessage(&msg, NULL, 0, 0) == 0)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
VG4_Response();
InvalidateRect(hWnd, NULL, 0);
}
}
return msg.wParam;
}
INT CALLBACK MyWindowFunc( HWND hWnd, UINT Msg,
WPARAM wParam, LPARAM lParam )
{
HDC hDC;
PAINTSTRUCT ps;
switch (Msg)
{
case WM_CREATE:
VG4_Init(hWnd);
SetTimer(hWnd, 111, 1, NULL);
return 0;
case WM_SIZE:
VG4_Resize(LOWORD(lParam), HIWORD(lParam));
return 0;
case WM_ERASEBKGND:
return 0;
case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);
VG4_Render();
VG4_CopyFrame(hDC);
EndPaint(hWnd, &ps);
return 0;
case WM_TIMER:
VG4_Response();
InvalidateRect(hWnd, NULL, 0);
return 0;
case WM_DESTROY:
VG4_Close();
KillTimer(hWnd, 111);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, Msg, wParam, lParam);
}