Windows Programming
-
win32 게임 만들기(2-2)- CCore::progress() (유휴시간)Windows Programming/win32 게임엔진만들기 2022. 3. 30. 23:00
우리는 이제 else구문() 즉 유휴시간이 발생 할때마다 progress()함수를 호출 할 것이다. (우리의 중심core객체를 통해서 유휴시간동안 작업을 함) 그러기 위해선 메시지 처리를 통하는게 아닌 progress()함수 내에서 그리기 작업이 가능하여야 한다. 우선 메인 윈도우에 그리기 위한 DC를 선언을 하자 윈도우 처리기에서는 WM_PAINT 가 발생하면 화면을 갱신 하였지만 progress()는 계속 해서 지웠다 그리기를 반복 한다. 게임에서 렌더링 이란 매순간 화면이 갱신 되어야 한다. 1) init() 초기화 함수 에서 GetDC로 메인 윈도우에 그릴 DC값을 획득 2) progress() 함수에서 사각형을 그리기 객체가 소멸될때 즉 프로그램이 종료시 ReleaseDC()를 통해 얻어온 DC..
-
win32 게임 만들기(2-1)-Core객체 생성, 싱글톤(Singleton),매크로 함수Windows Programming/win32 게임엔진만들기 2022. 3. 30. 22:25
Core클래스는 말그대로 가장 핵심이 되는 클래스이다. 우리 프로그램은 core클래스가 중추가 되어 돌아가게 된다. 중심이 되는 핵심 클래스가 여러개 생성 되지 않게 하기위해 단 하나의 객체를 생성하도록 싱글톤패턴으로 구현! 싱글톤 패턴의 장점 1. 메모리 낭비를 방지할 수 있다. 2. 싱글톤으로 만들어진 클래스와 다른 클래스의 인스턴스들의 데이터 공유가 쉽다. 3. 인스턴스가 절대적으로 한개만 존재하는 것을 보증하기에 개발 시 실수를 줄일 수 있다. 4. 싱글톤 객체를 사용하지 않는 경우 인스턴스를 생성하지 않는다. 5. 싱글톤을 상속시킬 수 있다. 앞으로 코딩을 해나갈 때 싱글톤 패턴으로 관리 되어져야할 매니저급 클래스들이 많이 생성 될 것이기 때문에 간편하게 사용하도록 매크로 함수로 만들어 둔다. ..
-
win32 게임 만들기(1)- 메인cpp기본 구조 세팅Windows Programming/win32 게임엔진만들기 2022. 3. 30. 21:29
1. 기본 메시지 루프를 PeekMessage()로 수정 게임 프로그래밍에선 유휴시간동안 처리해야하는 작업이 많아지므로 기존GetMessage()는 비효율 적이다. 그러므로 PeekMessage()를 이용하여 유휴 시간동안 수많은 작업들을 수행하여야 하여야 한다. 후에 우리는 Core객체를 만들어 Core객체를 중심으로 프로그램이 돌아가게 될것이다. 따라서 우리의 메인윈도우 핸들을 얻어가기 쉽게 하기 위해 InitInstance()속의 핸들을 전역변수로 받아 둘 것이다.
-
DC와 무효화 영역Windows Programming/Win32API 란? 2022. 3. 28. 20:42
DC Device Context 란? 출력에 필요한 모든 정보를 가지는 구조체 폰트, 색상, 굵기, 그리기 모드 , 무늬 등 모두 출력에 필요한 정보 윈도우를 만들고 그림을 그리려면 반드시 DC의 핸들을 얻어야 한다. DC는 임의의 장치( 윈도우, 프린터)에 출력을 할 때 사용하는 다양한 속성의 지닌 일종의 구조체 이다. 사용자는 DC에 출력을 하면 DC가 지닌 여러 속성을 사용 해서 DC가 연결된 장치에 출력된다. DC는 하나의 메시지를 처리하는 동안 핸들을 얻고 제거해야 한다. 즉, static 형태로 보관 해서 사용할 수 없다. -DC를 얻고 제거하는 방법들 [사용 예] HDC hdc = GetDC(hWnd); //각종 출력문에서 hdc를 사용한다. Rectangle(hdc, 0, 0, 0+100,..
-
PeekMessage()Windows Programming/Win32API 란? 2022. 3. 24. 20:34
메시지 루프에서 제일 중요한 함수는 메시지를 가져 오는 GetMessage함수이다. 이 함수는 메시지 큐에서 메시지를 가져오는데 메시지가 없으면 새로운 메시지가 전달될 때까지 리턴하지 않는다. 즉 메시지가 없을 경우 무한 대기한다. 만약, 메시지 큐에 메시지가 없을 경우 다른 작업을 하고 싶다면(유휴 시간) (게임 프로그래밍을 하기위해선 이 유휴시간을 잘 활용을 해야 하기때문에 PekkMessage()함수는 중요하다) PeekMessage()는 메시지 큐에 메시지가 없더라도 즉각 리턴한다. 리턴값이 TRUE 이면 메시지가 있다는 뜻 FALSE 이면 메시지가 없다는 뜻 우리는 PeekMessage()로 유휴시간(idle time)을 활용 할수 있다. if()구문 들어온 메시지가 WM_QUIT이면 break..
-
윈도우 핸들(HWND)Windows Programming/Win32API 란? 2022. 3. 20. 11:11
핸들은 해당 윈도우를 제어하기 위한 필수적 정보 ShowWindow() 함수는 윈도우를 화면에 다양한 형태로 출력할 때 사용한다. MoveWindow() 함수는 윈도우를 이동할 때 사용하며 GetWindowRect() 함수는 윈도우의 위치와 크기를 얻을 때 사용한다. 이 외 다수의 API 함수들은 객체를 제어하기 위한 목적으로 제공되며, 위에서 제시한 함 수들은 그 중 윈도우를 제어하기 위한 목적의 함수이다. 따라서 윈도우 핸들은 해당 윈도우를 제어하기 위한 필수적 정보이며, 이를 알고 있다면 다양한 API 함수를 사용하여 원하는 명령들을 내릴 수 있다. 윈도우 핸들 얻기 1번째 인자로 윈도우를 만든 윈도우 클래스 이름, 2번째 인자로 윈도우의 캡션바에 있는 문자열을 지정한다. 만약 윈도우 클래스 이름을..
-
WinMain과 프로시저,메시지큐Windows Programming/Win32API 란? 2022. 3. 18. 17:42
WinMain의 기본인자 HINSTANCE hInst: 자신의 인스턴스 값(주소) 코드의 시작주소가 전달 HINSTACE hPrev: 현재 사용안함(과거에는 사용됨) 현재는 NULL전달 LPWSTR lpCmdLIne: 명령행 인자(프로그램 시작시 전달되는 정보) int nCmdShow : 프로그램 시작시 전달되는 window 초기 모양 윈도우 프로시저 윈도우 프로시저는(Window Procedure) 윈도우 클래스당 하나씩 배정되며 메시지에 대응하는 방식을 정의함으로써 윈도우의 행동 양식을 결정 윈도우 프로시저는 아래와 같은 원형을 가짐 LRESULT CALLBACK WndProc(HWND hWNd, UINT iMessage, WPARAM wParam, LPARAM lParam); 문법적으로 함수이지만 ..
-
win32api란?Windows Programming/Win32API 란? 2022. 3. 11. 15:40
win32api는 window기반 os에서 작동하는 어플리케이션을 구현 하는 것 win32 API에서 제공하는 함수들을 이용해서 프로그램을 작성 OS한테 직접 명령을 내릴수 있는 함수 (네이티브,저수준) ex)우리가 누구와 소통을 할때 중간에 다른 사람을 거쳐 대화 하는것이 아닌 직접 대화하는것 장점-윈도우즈os에서 할수 있는 모든것을 구현 할수 있다. 단점-처음부터 끝까지 일일이 직접 구현해야 한다. 공부 목적 1.Windows Programming 이해(GrapgicUI):(ConsoleUI) -skeleton(기본코드) -event 기반 프로그래밍 기법 API는 응용프로그램을 위한 함수 집합을 제공 우리는 API를 통해 커널과 소통을 할 수 있다. API는 크게 3개의 모듈로 구분 할 수있다. GD..