示例#1
0
/* The start of 'MyWinFunc' function */
LRESULT CALLBACK MyWinFunc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam )
{
  HDC hDC;
  PAINTSTRUCT ps;
  MINMAXINFO *MinMax;
  INT w, h;
  SetDbgMemHooks();

  switch (Msg)
  {
  case WM_GETMINMAXINFO:
    MinMax = (MINMAXINFO *)lParam;
    MinMax->ptMaxTrackSize.y = 
     GetSystemMetrics(SM_CYMAXTRACK) +
     GetSystemMetrics(SM_CYCAPTION) +
     GetSystemMetrics(SM_CYMENU) +
     GetSystemMetrics(SM_CYBORDER) * 2;
  case WM_CREATE:
    SetTimer(hWnd, 30, 2, NULL);
    IK3_AnimUnit(hWnd); 
    SendMessage(hWnd, WM_SIZE, 0, 0);
  case WM_SIZE:
    w = LOWORD(lParam);
    h = HIWORD(lParam);
    /* Animation resize */
    IK3_Reasize(w, h);
    SendMessage(hWnd, WM_TIMER, 0, 0);
    return 0;
  case WM_MOUSEWHEEL:
    IK3_MouseWheel += (SHORT)HIWORD(wParam);
    return 0;
  case WM_KEYDOWN:
    if (LOWORD(wParam) == 'F')
      FlipFullScreen(hWnd);
    if (LOWORD(wParam) == VK_ESCAPE)
      SendMessage(hWnd, WM_DESTROY, 0, 0);
    return 0;
  case WM_ERASEBKGND:
    return 0;
  case WM_TIMER: 
    IK3_AnimRender();
    InvalidateRect(hWnd, NULL, FALSE);
    return 0;
  case WM_PAINT:
    hDC = BeginPaint(hWnd, &ps);
    IK3_AnimCopyFrame(hDC);
    EndPaint(hWnd, &ps);
    return 0;
  case WM_DESTROY:
    IK3_AnimClose();
    KillTimer(hWnd, 30);
    PostQuitMessage(0);
    return 0;
  }
  return DefWindowProc(hWnd, Msg, wParam, lParam);

} /* End of 'MyWinFunc' function */
示例#2
0
/* The main program function.
 * ARGUMENTS:
 *   - handle of application instance:
 *       HINSTANCE hInstance;
 *   - dummy handle of previous application instance (not used):
 *       HINSTANCE hPrevInstance;
 *   - command line string:
 *       CHAR *CmdLine;
 *   - show window command parameter (see SW_***):
 *       INT CmdShow;
 * RETURNS:
 *   (INT) Error level for operation system (0 for success).
 */
INT WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    CHAR *CmdLine, INT ShowCmd )
{
    /* INT i; */
    WNDCLASS wc;
    HWND hWnd;
    MSG msg;

    SetDbgMemHooks();

    /* Create window class */
    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_ERROR);
    wc.lpszMenuName = NULL;
    wc.hInstance = hInstance;
    wc.lpfnWndProc = VG4_MyWindowFunc;
    wc.lpszClassName = VG4_WND_CLASS_NAME;

    if (!RegisterClass(&wc))
    {
        MessageBox(NULL, "Error register window class", "ERROR", MB_OK | MB_ICONERROR);
        return 0;
    }
    /* Create window */
    hWnd =
        CreateWindow(VG4_WND_CLASS_NAME,
                     "Animation System <3",
                     WS_OVERLAPPEDWINDOW,
                     CW_USEDEFAULT, CW_USEDEFAULT,
                     CW_USEDEFAULT, CW_USEDEFAULT,
                     NULL, NULL, hInstance, NULL);
    ShowWindow(hWnd, SW_SHOWNORMAL);
    UpdateWindow(hWnd);

    /*** Add unit samples ***/
    /*
    for (i = 0; i < 3000; i++)
      VG4_AnimAddUnit(VG4_UnitCreateBall());
    */
    VG4_AnimAddUnit(VG4_UnitCreateClock());

    /* Run message loop */
    while (GetMessage(&msg, NULL, 0, 0))
        DispatchMessage(&msg);
    return 30;
} /* End of 'WinMain' function */