아래 코딩이 분명 내가 좀전까진 컴파일이 잘 됬는데, 딴짓하다가 다시 하니까
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, ¶ms);
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, ¶ms);
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, ¶ms);
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, ¶ms);
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);
}
댓글 0