[windowsAPI] 3주차(2), 타이핑 프로그램 만들기

교내 전공과목인 윈도우즈 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) 실행결과

 

 

끗.