Win32 API44 Win32 API 기초 : Key Manager (2) 키 입력을 받으면 사각형이 움직이게 코드를 작성하였습니다. 그런데 문제는 윈도우가 내려가 있거나 다른 윈도우를 포커싱하고 있는 등우리 프로그램의 윈도우가 포커싱되지 않은 상태에서도 키 입력이 들어오면 사각형이 움직입니다. CKeyMgr 클래스를 통해 만든 키 매니저의update 함수에서 GetAsyncKeyState 함수를 통해 키 입력을 받았기 때문입니다. 다른 윈도우를 포커싱하고 있어도 프로그램이 돌아가고 있기만 한다면 GetAsyncKeyState 함수는 비동기 함수이므로키 입력이 작동하는 것이죠. 그래서 아래 코드처럼 키 매니저의 update 함수를 수정해 주었습니다. 61번째 줄에서 GetMainHwnd 함수를 통해메인 윈도우 핸들을 반환받아 hMainHwnd라는 지역 변수에저장합니다. 그.. 2024. 7. 3. Win32 API 기초 : Key Manager (1) 기존에는 사각형을 움직이기 위해키 입력을 GetKeyState 함수를 통해 받았습니다. GetKeyState 함수가 호출되는 순간, 왼쪽 키가 입력되어 있다면사각형이 왼쪽으로 GetKeyState 함수가 호출되는 순간, 오른쪽 키가 입력되어 있다면 사각형이 오른쪽으로 이동했죠. 근데 이렇게 한 프레임 속에서 키 입력의 여부를 따지다 보면문제가 발생할 수 있습니다. 예를 들어 한 프레임 실행이 시작되었을 때는 왼쪽 키 입력이 발생했는데, 프레임 실행이 끝날 때 키에서 손을 떼며 입력이 사라졌습니다. 그러면 최종적으로 키 입력이 없던 것으로 간주하여오브젝트가 움직이지 않는 상황이 발생할 수도 있는 것이죠. 물론 한 프레임이 실행되는 동안의 시간,즉 Delta Time은 상당히 짧은 시간이므로보통 키를 누르자.. 2024. 7. 1. Win32 API 기초 : Double Buffering 윈도우에 사각형을 그리고 키 입력을 통해움직일 수 있게 하였지만 잔상이 남는 문제가 있었습니다. 사각형을 계속 그리기만 하기 때문인데요, 이 문제를 해결하려면 사각형을 지운 후 바뀐 위치에사각형을 다시 그리고, 다시 키 입력이 들어오면 사각형을지우고 다시 그리는 식으로 진행되어야 합니다. 그래서 CCore 클래스로 만든 코어 객체의progress 함수가 실행되면서 호출되는 render 함수에서 73번째 줄을 보시면 Rectangle 함수 한 개가 추가된 것을 확인할 수 있습니다. 이처럼 작업 영역에 딱 맞는 큰 사각형 하나를 그리면기본 브러쉬는 흰색이므로 작업 영역이 모두 흰색으로칠해질 것이고 마치 모든 영역이 지워진 것 같은효과를 볼 수 있을 것입니다. 이때 좌상단 좌푯값을 -1로 설정하고 우하단 좌푯.. 2024. 6. 30. Win32 API 기초 : Timer (2) CCore 클래스의 싱글톤 객체의 멤버 함수 progress에는 프로그램이 동작하는 동안 계속 실행될 코드가 있습니다. 이때 CTimeMgr 클래스의 싱글톤 객체가 생성되며update 함수를 호출하죠. CTimeMgr 클래스에는 각종 멤버 변수와 멤버 함수가 존재합니다. CTimeMgr 클래스의 멤버 함수 update는 progress 함수가 호출될 때마다, 즉 매 프레임마다 호출이 되는 것이죠. CTimeMgr 클래스의 update 함수는 30번째 줄에서 QueryPerformanceCounter 함수를 호출합니다. 이를 통해 update 함수가 호출되는 순간의시점을 m_liCurCount에 저장하죠. 그리고 현재 시점이 저장된 m_liCurCount와이전 시점이 저장된 m_liPrevCou.. 2024. 6. 29. Win32 API 기초 : Timer (1) 키 입력이 생길 때마다 사각형이1 픽셀 움직이도록 하였더니컴퓨터의 처리 속도가 너무 빨라서살짝 키 입력을 주어도 사각형이 너무 많이움직인다는 문제점이 있었습니다. 이를 해결하려면 키 입력이 들어왔을 때1 픽셀이 아니라 0.01 정도로 해 주면 개선되겠죠. 이렇게 사각형의 위칫값을 실수로 저장하려면사각형의 위칫값을 담당하는 멤버 변수의 타입을실수 타입으로 바꿔 주어야겠죠. 기존에는 사각형의 위칫값을 저장하는 멤버 변수는POINT형, 즉 두 개의 정수로 이루어져 있었습니다. 이것을 두 개의 실수로 위칫값을 나타내고자 하므로 위칫값을 저장하기 위한 새로운 자료형(구조체)를하나 만들어 보도록 합시다. Header 필터 안에 struct.h 파일을 만들고 Vec2라는 구조체를 만들었습니다. Vector를 표현.. 2024. 6. 27. Win32 API 기초 : Core 클래스 (2) CCore 클래스로 만든 싱글톤 객체를 초기화하기 위한Init 함수를 통해 해상도를 조절할 것입니다. 인자로 값을 받았고 이 값을 통해 해상도를 나타내는 멤버를 초기화하였죠.이제 해상도를 실제로 바꾸고자 합니다. 24번째 줄에서 보이는 함수를 통해 프로그램을 실행했을 때 띄워지는 윈도우의 해상도를 설정할 수 있습니다. 그런데 SetWindowPos 함수를 통해 넣는 값은작업 영역은 물론 타이틀 바와 메뉴 바, 그리고 윈도우의 테두리 등 모두를 포함한 해상도죠. 하지만 우리가 원하는 것은 작업 영역에 대한 해상도입니다. 그래서 작업 영역을 우리가 원하는 해상도로 설정하려면모든 요소의 해상도까지 더한 값을 넣어줘야그나마 작업 영역의 해상도가 원하는대로 설정이 되겠죠. 코드 작성자가 직접 모든 요소를 고려하.. 2024. 6. 26. 이전 1 ··· 3 4 5 6 7 8 다음