Programming Language/Windows API
입력된 방향키 확인
1. 상하좌우와 가운데 사각형을 그리고 입력된 방향의 색상을 변경
[1] 방향키를 누르면 해당 방향의 색상은 빨간색으로 변경되어야 한다.
[2] 키를 떼면 원래대로 돌아와야 한다.
[3] 누르고 있는 동안은 해당방향의 사각형은 빨간색으로 유지해야 한다.
2. 소스
1) 사용자 정의함수
void my_init(HDC hdc, int x, int y, int *flag, HBRUSH *hBrush) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
int value = (3 * i) + j + 1;
//value = 현재 for문의 횟수
if (value % 2 == 0 || value == 5) {
//2로 나누어 떨어지거나 5이면?
//즉 대각선을 없애고 상하좌우와 가운데만 사각형과 텍스트를 그린다.
TCHAR tmp[20];
switch (value) {
case 2:
_stprintf_s(tmp, _T("상"));
break;
case 4:
_stprintf_s(tmp, _T("좌"));
break;
case 6:
_stprintf_s(tmp, _T("우"));
break;
case 8:
_stprintf_s(tmp, _T("하"));
break;
default:
_stprintf_s(tmp, _T(""));
//가운데이면 표시 x
}
if (*flag == value) {
//입력된 키와 사각형의 위치가 같으면
*hBrush = CreateSolidBrush(RGB(255, 0, 0));
//브러시핸들에 빨간색을 저장
SelectObject(hdc, *hBrush);
//창의 브러시속성에 빨간색을 부여
}
Rectangle(hdc, x + j * 100, y + i * 100, x + (j + 1) * 100, y + (i + 1) * 100);
SelectObject(hdc, GetStockObject(WHITE_BRUSH));
//DeleteObject(hBrush);
//흰색으로 변경하거나 브러시속성을 지운다.
TextOut(hdc, x + j * 100 + 42, y + i * 100 + 42, tmp, _tcslen(tmp));
//특정 위치에 특정 글자를 출력한다.
}
}
}
}
2) 윈도우 메세지처리함수
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int x;
static int y;
//사각형의 좌표
static int flag;
//입력된 상하좌우의 번호
static HBRUSH hBrush;
//그릴 사각형의 색상을 저장
switch (message)
{
case WM_CREATE:
{
x = 200;
y = 200;
//초기 사각형의 좌표
flag = 0;
//입력된 방향 없음
}
break;
case WM_COMMAND:
{
int wmId = LOWORD(wParam);
// 메뉴 선택을 구문 분석합니다.
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
break;
case WM_KEYDOWN:
{
if (wParam == VK_UP) {
flag = 2;
}
else if (wParam == VK_DOWN) {
flag = 8;
}
else if (wParam == VK_LEFT) {
flag = 4;
}
else if (wParam == VK_RIGHT) {
flag = 6;
}
InvalidateRgn(hWnd, NULL, TRUE);
}
break;
case WM_KEYUP:
{
flag = 0;
InvalidateRgn(hWnd, NULL, TRUE);
}
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
my_init(hdc, x, y, &flag, &hBrush);
EndPaint(hWnd, &ps);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
3. 시연
- 처음 설정 시 색상을 GetStockObject(GRAY_BRUSH) 로 부여하여 회색으로 출력되었다.
'Programming Language > Windows API' 카테고리의 다른 글
| 지렁이게임 (0) | 2018.09.30 |
|---|---|
| 두더지잡기 게임 (0) | 2018.09.30 |
| 사각형 그리기 (0) | 2018.09.30 |
| 도형 자동이동 (0) | 2018.09.30 |
| 마우스로 도형 옮기기 (0) | 2018.09.30 |
댓글