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 |
댓글