아래 코딩이 분명 내가 좀전까진 컴파일이 잘 됬는데, 딴짓하다가 다시 하니까

63개 오류와 2개의 경고 메세지가 뜨네.

예전에도 한번 이래서 컴파일러 밀고 다시 하니까 잘 된 기억이 있는데. 한번 아래 코드좀 컴파일 해주라 ㅠㅠ

내가 쓰는 컴파일러는 VS2008







#include <windows.h>
#include <process.h> //스레드를 실행시키기 위한 헤더 파일
#include <math.h>

typedef struct
{
 HWND hwnd;
 int cxClient;
 int cyClient;
 int cyChar;
 BOOL bKill;
} PARAMS, *PPARAMS;

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK WndProc1(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK WndProc2(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK WndProc3(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK WndProc4(HWND, UINT, WPARAM, LPARAM);
int CheckBottom(HWND hwnd, int, int, int);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
 static TCHAR wsAppName[] = TEXT(\"KeyView1\");
 WNDCLASS wndclass;
 HWND hwnd;
 MSG msg;

 //부모 윈도우 사양 결정하기
 wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
 wndclass.lpfnWndProc = WndProc;
 wndclass.cbClsExtra = 0;
 wndclass.cbWndExtra = 0;
 wndclass.hInstance = hInstance;
 wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
 wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
 wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
 wndclass.lpszClassName = wsAppName;
 wndclass.lpszMenuName = NULL;

 //구조체의 시작번지 던져준다.
 if(!RegisterClass(&wndclass))
 {
  MessageBox(NULL, TEXT(\"This program requires Windows NT\"), wsAppName, MB_IC);
  return 0;
 }


 //메모리에 응용프로그램의 윈도우를 만들어준다
 hwnd = CreateWindow(wsAppName, TEXT(\"Thread Test\"),
  WS_OVERLAPPEDWINDOW,
  CW_USEDEFAULT, CW_USEDEFAULT,
  CW_USEDEFAULT, CW_USEDEFAULT,
  NULL, NULL, hInstance, NULL);

 //모니터에 부모윈도우를 출력한다
 ShowWindow(hwnd, iCmdShow);
 UpdateWindow(hwnd);

 //루프를 돌리며 응용프로그램 메세지 큐에 있는 메세지 가져와서 msg 구조체에 채워넣기
 while(GetMessage(&msg, NULL, 0, 0))
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }

 return msg.wParam;
}

int CheckBottom(HWND hwnd, int cyClient, int cyChar, int iLine)
{
 if(iLine * cyChar + cyChar > cyClient)
 {
  InvalidateRect(hwnd, NULL, TRUE);
  UpdateWindow(hwnd);
  iLine = 0;
 }
 return iLine;
}

void Thread1(PVOID pvoid)
{
 HDC hdc;
 int iNum = 0, iLine = 0;
 PPARAMS pparams;
 TCHAR szBuffer[16];

 pparams = (PPARAMS)pvoid;

 while(!pparams->bKill)
 {
  if(iNum < 0)
   iNum = 0;
  iLine = CheckBottom(pparams->hwnd, pparams->cyClient, pparams->cyChar, iLine);
  hdc = GetDC(pparams->hwnd);

  TextOut(hdc, 0, iLine * pparams->cyChar, szBuffer, wsprintf(szBuffer, TEXT(\"%d\"), iNum++));
  ReleaseDC(pparams->hwnd, hdc);
  iLine++;
 }
 _endthread();
}

LRESULT CALLBACK WndProc1(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
//단순히 1씩 증가 하는 숫자들의 시퀀스를 출력
{
 static PARAMS params;
 
  switch(message)
  {
  case WM_CREATE:
   params.hwnd = hwnd;
   params.cyChar = HIWORD(GetDialogBaseUnits());
   _beginthread(Thread1, 0, &params);
  case WM_SIZE:
   params.cyClient = HIWORD(lParam);
   return 0;
  case WM_DESTROY:
   params.bKill = TRUE;
   return 0;
  }
return DefWindowProc(hwnd, message, wParam, lParam);
}

void Thread2(PVOID pvoid)
{
 HDC hdc;
 int iNum = 1, iLine = 0, i, iSqrt;
 PPARAMS pparams;
 TCHAR szBuffer[16];

 pparams = (PPARAMS)pvoid;

 while(!pparams->bKill)
 {
  do{  
    if(++iNum < 0)
     iNum = 0;
    iSqrt = (int)sqrt((double)iNum);

    for(i=2; i<=iSqrt; i++)
     if(iNum %i == 0)
      break;
   } while(i<=iSqrt);

   iLine = CheckBottom(pparams->hwnd, pparams->cyClient, pparams->cyChar, iLine);
   hdc = GetDC(pparams->hwnd);
   TextOut(hdc, 0, iLine*pparams->cyChar, szBuffer, wsprintf(szBuffer, TEXT(\"%d\"), iNum++));

   ReleaseDC(pparams->hwnd, hdc);
   iLine++;
 }
 _endthread();
 }
LRESULT CALLBACK WndProc2(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
//소수의 시퀀스를 출력
{
 static PARAMS params;
 
  switch(message)
  {
  case WM_CREATE:
   params.hwnd = hwnd;
   params.cyChar = HIWORD(GetDialogBaseUnits());
   _beginthread(Thread2, 0, &params);
  case WM_SIZE:
   params.cyClient = HIWORD(lParam);
   return 0;
  case WM_DESTROY:
   params.bKill = TRUE;
   return 0;
  }
  return DefWindowProc(hwnd, message, wParam, lParam);
}

void Thread3(PVOID pvoid)
{
 HDC hdc;
 int iNum = 0, iNext = 1, iLine = 0, iTemp;
 PPARAMS pparams;
 TCHAR szBuffer[16];

 pparams = (PPARAMS)pvoid;

 while(!pparams->bKill)
 {
  if(iNum < 0)
  {
   iNum = 0;
   iNext = 1;
  }

  iLine = CheckBottom(pparams->hwnd, pparams->cyClient, pparams->cyChar, iLine);
  hdc = GetDC(pparams->hwnd);

  TextOut(hdc, 0, iLine * pparams->cyChar, szBuffer, wsprintf(szBuffer, TEXT(\"%d\"), iNum));
  ReleaseDC(pparams->hwnd, hdc);
  iTemp = iNum;
  iNum = iNext;
  iNext += iTemp;
  iLine ++;
 }
 _endthread();
}

LRESULT CALLBACK WndProc3(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
//피보나치수열의 시퀀스를 출력
{
 static PARAMS params;
 
  switch(message)
  {
  case WM_CREATE:
   params.hwnd = hwnd;
   params.cyChar = HIWORD(GetDialogBaseUnits());
   _beginthread(Thread3, 0, &params);
  case WM_SIZE:
   params.cyClient = HIWORD(lParam);
   return 0;
  case WM_DESTROY:
   params.bKill = TRUE;
   return 0;
  }
  return DefWindowProc(hwnd, message, wParam, lParam);
}

void Thread4(PVOID pvoid)
{
 HDC hdc;
 int iDiameter;
 PPARAMS pparams;

 pparams = (PPARAMS)pvoid;

 while(!pparams->bKill)
 {
   InvalidateRect(pparams->hwnd, NULL, TRUE);
   UpdateWindow(pparams->hwnd);

   iDiameter = rand() % (max(1, min(pparams->cxClient, pparams->cyClient)));
   hdc = GetDC(pparams->hwnd);

   Ellipse(hdc, (pparams->cxClient - iDiameter) / 2, (pparams->cyClient - iDiameter) / 2,
    (pparams->cxClient + iDiameter) / 2, (pparams->cyClient + iDiameter) / 2);
  
   ReleaseDC(pparams->hwnd, hdc);
 }
 _endthread();
}

LRESULT CALLBACK WndProc4(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 static PARAMS params;
 
  switch(message)
  {
  case WM_CREATE:
   params.hwnd = hwnd;
   params.cyChar = HIWORD(GetDialogBaseUnits());
   _beginthread(Thread4, 0, &params);
  case WM_SIZE:
   params.cyClient = HIWORD(lParam);
   params.cxClient = LOWORD(lParam);
   return 0;
  case WM_DESTROY:
   params.bKill = TRUE;
   return 0;
  }
  return DefWindowProc(hwnd, message, wParam, lParam);
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 static HWND hwndChild[4];
 static TCHAR * szChildClass[] = {TEXT(\"Child1\"), TEXT(\"Child2\"), TEXT(\"Child3\"), TEXT(\"Child4\")};
 static WNDPROC ChildProc[] = { WndProc1, WndProc2,WndProc3, WndProc4 };
 HINSTANCE hInstance;
 int i, cxClient, cyClient;
 WNDCLASS wndclass;

  switch(message)
  {
  case WM_CREATE:
  hInstance = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE);

  wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
  wndclass.cbClsExtra = 0;
  wndclass.cbWndExtra = 0;
  wndclass.hInstance = hInstance;
  wndclass.hIcon = NULL;
  wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
  wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  wndclass.lpszMenuName = NULL;

  for(i=0; i<4; i++)
  {
   wndclass.lpfnWndProc = ChildProc[i];
   wndclass.lpszClassName = szChildClass[i];

   RegisterClass(&wndclass);

   hwndChild[i] = CreateWindow(szChildClass[i], NULL, WS_CHILDWINDOW | WS_BORDER | WS_VISIBLE,
       0, 0, 0, 0, hwnd, (HMENU)i, hInstance, NULL);
  }
  return 0;

  case WM_SIZE:
   cxClient = LOWORD(lParam);
   cyClient = HIWORD(lParam);

   for(i=0; i<4; i++)
  {
    MoveWindow(hwndChild[i], (i%2)*cxClient / 2, (i>1)*cyClient / 2,
    cxClient / 2, cyClient / 2, TRUE);
  }
  return 0;
  case WM_CHAR:
   if(wParam == \'\\x1B\')
    DestroyWindow(hwnd);
   return 0;
  case WM_DESTROY:
   PostQuitMessage(0);
   return 0;
  }
 return DefWindowProc(hwnd, message, wParam, lParam);
}