교내 전공과목인 윈도우즈 API수업을 정리합니다
1. Timer프로그램을 수평우향으로 움직이게 바꾸자. (기존: 수직하향)
#그전에, [오류: 'ZI'과(와) '/Gy-'명령줄 옵션이 호환되지 않습니다.] 해결하기
아니오 -> 예로 바꿔주기.
(1) 코드소스
case WM_TIMER:
if (x >= rect.right) //바뀜
{
str[0] = rand() % 26 + 97;
y = rand() % (rect.bottom - 40) + 20; //바뀜
x = 0; //바뀜
}
x += 60; //바뀜
InvalidateRect(hWnd, NULL, TRUE);
return 0;
3주차(1) 포스팅 글에 있던 소스에서 WM_TIMER부분만 바꿔주면 됨.
(2) 실행결과
옆으로 움직이고 있는 거 맞음.
2. 타이핑 기능을 추가하기
(1) 소스코드
/* 전역변수 */
int x, y;
int iTry = 0; // 키보드를 누른 횟수
int iCorrect = 0; // 키보드 눌러서 맞춘 횟수
TCHAR str[26]; // 알파벳 공간
TCHAR sTry[128]; // 출력할 문자열 공간(시도횟수)
TCHAR sCorrect[128]; // 출력할 문자열 공간(맞춘횟수)
/* WM_TIMER 역할 */
case WM_TIMER:
if (x >= rect.right) // 글자가 다 지나간 상태, 즉 실패했다면
{
str[0] = rand() % 26 + 97;
y = rand() % (rect.bottom - 40) + 20; // 수평움직임
x = 0; // 수평움직임
iTry++;
}
x += 60; // 수평움직임
InvalidateRect(hWnd, NULL, TRUE);
return 0;
/* WM_CHAR 작성 */
case WM_CHAR: // 키보드를 눌렀을 때
if (wParam == str[0]) { // 현재 str과 같다면
iCorrect++; // 맞춘 횟수 증가
}
str[0] = rand() % 26 + 97; // 맞췄든 말든 새로운 글자 발생
y = rand() % (rect.bottom - 40) + 20; // 시작점 설정
x = 0; //시작점 설정
iTry++; //시작 횟수 설정
InvalidateRect(hWnd, NULL, TRUE);
return 0;
/* WM_PAINT 수정 */
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
wsprintf(sTry, TEXT("모든 문자수 : %d"), iTry);
wsprintf(sCorrect, TEXT("맞춘 문자수: %d"), iCorrect);
TextOut(hdc, 30, 30, sTry, lstrlen(sTry));
TextOut(hdc, 30, 60, sCorrect, lstrlen(sCorrect));
TextOut(hdc, x, y, str, lstrlen(str));
EndPaint(hWnd, &ps);
return 0;
- wsprintf(LPTSTR lpOut, LPCTSTR lpFmt, ...);
lpOut : 출력을 내보낼 문자열 버퍼(최대길이 1024byte)
lpFmt : 서식 문자열, 일반 문자열 사이에 %로 시작되는 서식 포함가능
... : 문자열내 서식과 대응될 변수들
(2) 실행결과
끗.