Win32 API44 Win32 API 기초 : Singleton (2) 싱글톤 패턴은 여러 방식으로 구현이 가능합니다. 아래 코드와 같이 동적 할당을 진행하는 방식과 또는 아래 코드와 같이 CCore 객체를 하나 만들기 위한 GetInstance 함수 안에정적 변수 g_Inst를 선언하고 해당 변수의 주솟값을반환하는 방식입니다. g_Inst 가 함수 안에 선언되어 함수 안에서만 접근이가능하다고 생각할 수 있지만, 주솟값을 반환하기 때문에 해당 함수 밖에서도 접근이 가능합니다. 이것이 포인터의 강력함이죠. 정적 변수이므로 g_Inst는 data 영역에 존재하게 되는데,프로그램이 종료되면 알아서 소멸되기 때문에 메모리 해제를 신경 쓰지 않아도 됩니다. 반대로 생각하면 메모리를 해제하고 싶어도 못한다는 것이죠. 그래서 큰 문제가 발생할 거 같지만 사실프로그램에서 싱글톤으로 .. 2024. 6. 24. Win32 API 기초 : Core 클래스 (1) / Singleton (1) 프로그램을 만들기 앞서, Win32 API 프로젝트 생성 시 자동으로 만들어진 파일은 Default라는 새 필터를 생성하여 넣고 Engine이라는 필터를 만들어서 그 안에 Header 필터와 Core 필터를 만들어 주겠습니다. 그리고 클래스 마법사를 통해 CCore라는 클래스를 생성하겠습니다. 이는 프로그램에서 중추 역할을 하는 클래스입니다.정확히는 CCore라는 클래스로 만든 객체가프로그램의 중추 역할을 하는 것이겠죠? 그래서 CCore로 만든 객체는 한 개만 존재해야 할 겁니다. 이를 위해 싱글톤 패턴을 적용하여객체의 생성을 1개로 제한할 겁니다. 일단 생각해 볼 수 있는 건 생성자를 private로 선언하는 것이죠. 객체가 만들어지려면 반드시 생성자를호출을 통해 만들어지는데 private로 .. 2024. 6. 23. Win32 API 기초 : PeekMessage (2) GetMessage 함수는 메시지가 있을 때만 반환하는 함수입니다.즉 메시지가 없으면, 메시지가 생길 때까지 계속 대기하게 되는 거죠. 일반적인 메시지라면 true를 반환하여 메시지를 처리하고msg.message가 WM_QUIT이라면 false를 반환하여 프로그램을 종료하죠. 이러한 특징 때문에 메시지가 없어도 자동으로 어떤 동작이 일어나게 하는데 제약이 생깁니다. 예를 들어 게임에서 플레이어의 입력이 없어도몬스터가 움직이게 하고자 하려면 강제로 메시지를 발생시켜몬스터의 위치를 바꾸고 갱신시켜야 하는 거죠. 이러한 문제를 해결하는 방법으로는PeekMessage 함수를 사용하는 겁니다. PeekMessage 함수는 메시지가 있으면 true를메시지가 없으면 false를 반환합니다. 50번째 줄에서 볼 .. 2024. 6. 22. Win32 API 기초 : PeekMessage (1) 직접 마우스를 통해 사각형을 그릴 수 있도록 코드를 작성해 봅시다. 이를 위한 각종 전역 변수를 추가해 보죠. 117번째 줄에 있는 구조체 tObjInfo는POINT형 멤버 두 가지를 갖고 있습니다. 멤버 g_ptObjPos는 사각형의 중심 좌푯값을 나타냅니다.맴버 g_ptObjScale은 사각형의 크기를 나타냅니다. 123번째 줄에 있는 vector형 객체 v_recObj는 사각형 객체들을 관리하는 vector이죠. 124번째 줄에 있는 전역 변수 g_ptLT는사각형의 좌상단 좌푯값을, 125번째 줄에 있는 전역 변수 g_ptRB는사각형의 우하단 좌푯값을 의미합니다. 128번째 줄에 있는 bool형 변수 bLbtnDown은현재 마우스 좌클릭이 발생한 상태인지 아닌지를나타내기 위한 변수입니다. .. 2024. 6. 18. Win32 API 기초 : 핸들, DC, 윈도우 이벤트 (2) 저번에는 기본 펜과 브러쉬를 통해 검은색 테두리를 가진 흰색 사각형을 만들었습니다. 이번에는 펜과 브러쉬의 색을 지정하여 사각형을 출력해 보죠. WndProc 함수에서 WM_PAINT case를 보시면150번째 줄에 CreatePen 함수가 보입니다. 함수명 그대로 펜을 만드는 함수인데요, 인자로 세 개를 받습니다. 각 인자가 무엇을 의미하는지 검색하여 살펴보죠. 먼저 첫 번째 인자인 iStyle은 펜의 스타일을 의미합니다. 파선, 점선 등 다양한 스타일이 존재합니다. 두 번째 인자인 cWidth는 펜의 너비를 의미합니다. 인자로 넣을 때 입력하는 숫자는픽셀 단위의 단위를 의미합니다. 펜의 두께라고 생각하시면 되겠습니다. 세 번째 인자인 color는 펜의 색을 의미합니다. RGB 매크로를 사용하여.. 2024. 6. 17. Win32 API 기초 : 핸들, DC, 윈도우 이벤트 (1) 윈도우에 어떤 메시지가 들어오면해당 윈도우가 갖고 있는 함수, WndProc 함수를 통해동작을 처리한다고 했습니다. WndProc 함수에서 case WM_PAINT는어떤 경우에 실행되는 걸까요? 무효화 영역(Invaildate)이 발생했을 때입니다. 무효화 영역은 해당 윈도우가 사라졌다가 다시 등장하는 영역을 말합니다. 이 영역을 발생시켜 WM_PAINT가 실행되도록 해 보죠. 일단 프로그램을 실행합니다. 이후 145번째 줄에 중단점을 찍은 후 윈도우를 내렸다가 다시 윈도우를 띄워 봅니다. 그러자 중단점에 걸리는 모습을 볼 수 있습니다. WM_PAINT 코드가 실행된 것이죠. 윈도우가 내려가면서 사라졌고 이를 다시 클릭하여 열었을 때 윈도우를 다시 그려야 하기 때문에 WM_PAINT 코드가 실행되는 겁.. 2024. 6. 16. 이전 1 ··· 4 5 6 7 8 다음