전체 글 71

enum , enum class

enum ITEMTYPE { Weapon, Armor, Potion, Accessories }; enum이란 정수형 상수를 문자로 코드에서 사용하게 해주는 문법으로 위의 코드에서 Weapon은 0 이되고 Armor는 1 Potion은 2 , Accessories 3 이 된다. enum에서 정의한 얘들을 사용할 때에는 if(3 != Weapon) { } 이렇게 enum의 이름을 생략하고도 사용할 수 있다 그렇기 때문에 enum안에서 정의해놓은 이름은 다른 enum문에서 사용할 수 없다.이름이 겹치기 때문에 안된다. 이런 이유에서 enum class 문법이 나왔으며 enum class TYPE { Weapon, Armor } int main() { if(1 != TYPE::Weapon) } 이렇게 풀네임으로..

WinAPI 2021.01.22

LoadImage 함수 (이미지 로드)

램에 존재하지 않는 데이터를 실행하거나 프로그램에서 이용할 수 없다. 이미지는 하드 디스크에 저장되어 있고 이를 프로그램에서 사용하려면 램으로 올려줘야 한다.그래픽 카드를 사용한다면 그래픽카드에 올라가게되고 WinApi에서 지원하는 랜더링은 그래픽 카드를 사용하지 않기 때문에 하드디스크에서 램으로 올리는 방식이다. api에서는 이미지를 불러올때 LoadImage 라는 함수를 사용할 수 있다. HANDLE LoadImage( HINSTANCE hinst, // handle to instance LPCTSTR lpszName, // Image to load UINT uType, // Imgae type int cxDesired, // desired width int cyDesired, // desired h..

WinAPI 2021.01.21

프레임워크(Framework)란?

프레임워크란 의미로 본다면 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것이라고 정의되어있다. 프레임워크는 라이브러리와 달리 애플리케이션의 틀과 구조를 결정할 뿐 아니라, 그 위에 개발된 개발자의 코드를 제어한다. 프레임워크는 구체적이며 확장 가능한 기반 코드를 가지고 있으며, 설계자가 의도하는 여러 디자인 패턴의 집합으로 구성되어 있다. 일단 프레임워크를 라이브러리의 연장선상에서 생각하는 것으로 이해를 시작해 보면 라이브러리의 정의는 자주 쓰일 만한 기능들을 모아놓은 유틸(클래스)들의 모음집으로 생각할 수 있다. 사용자와 실제 구현하고자 하는 기능 사이에 사용자로 하여금 구현하고자 하는 기능을 쉽게 쉽게 제공해주는 중간 계층이란 면에..

공부하기 2021.01.20

더블버퍼링

Api 코드에 그림,사각형 무엇을 그리던 영역이 겹쳐지면 그리고 지워지고 다시 그리고를 반복하기때문에 겹쳐지는 영역이 깜빡이는것처럼 보이는 현상이 일어난다. 이를 해결하기 위해서 더블버퍼링이라는 기법을 사용하는데 이는 내가 만든 윈도우창과 똑같은 크기의 창을 하나 더 만들어서 거기에다가 그림을 그린후 완성된 그림을 복사해서 화면에 보이는 윈도우창에 보여 주는 기법이다. 위의 그림과 같은 개념으로 BackBuffer에서 그림을 그리고 완성된 화면을 MainWindow에 복사해서 보여주는 방식인데 그림과 같이 TitleBar의 크기를 제외한 순수한 클라이언트창의 크기를 구해서 똑같은 창을 하나 만들어 줘야 한다. #include int ClientSizeX = 900; int ClientSizeY = 800..

WinAPI 2021.01.20

InLine 문법

함수를 선언할때 inline 이라는 키워드를 붙이면은 함수를 함수체만 남겨서 스택에 메모리를 만들지 말라는 키워드이다. 함수를 호출하면 프로그램은 무조건 느려진다. 이는 함수의 동작 원리에 대해서 생각해보면 되는데 함수가 호출되면 스택에 지역변수나 리턴값을 저장할 공간을 할당하고 함수가 종료되면 이 메모리를 삭제하는 동작을 거치기 때문에 느려지는게 당연하다. int Func(int _Number) { return _Number * 2; } int main() { int A = Func(10); } 위의 코드를 실행하면 Func(10)이 호출되고 스택에 지역변수에 대하여 저장공간을 할당하고 수행한다. 위의 코드에 inline 키워드를 붙여서 inline int Func(int _Number) { retur..

WinAPI 2021.01.20

싱글톤 패턴

싱글톤 패턴이란 객체를 오로지 1개만 만들 수 있는 구조를 말한다.(클래스 외부에서) 싱글톤을 사용하는 이유도 위와 같다. class Static_Value_SingleTon { public: static Static_Value_SingleTon Test; private: Static_Value_SingleTon(); ~Static_Value_SingleTon(); }; 위의 코드처럼 private으로 외부에서의 생성을 막고 static으로 객체를 하나 만들어주면 된다. 이는 Static Value 싱글톤이라고 한다.

WinAPI 2021.01.15

결합도, 응집도

모듈화 : 기능들을 관련 기능들끼리 모아두는 것 Ex)윈도우는 윈도우에 관련된 일만 한다. 그치만 어떠한 클래스나 기능이 다른 기능을 전혀 사용하지 않고 만든다는것은 불가능에 가깝다.그렇지만 최소화 해야 한다는 것이다. 여기서 다른 기능들을 많이 사용할수록 결합도가 높아진다고 하고 결합도가 높아질수록 둘을 분리하기가 힘들어진다. 응집도는 관련 기능들이 얼마나 잘 모아져 있는지를 뜻한다. Ex)윈도우에서 창의 크기를 변경하는데 이 기능이 윈도우에 없어서 내가 직접 만들어야 하거나 다른 기능을 가져다 써야한다면 응집도가 낮다라고 표현. 어떤 클래스를 만들었으면 그 클래스에서 처리할수 있는 기능을 최대한 많이 만들어서 그 관련 기능을 다른곳에서 만들어야겠다는 생각을 못하게 해야한다. 즉, 결합도는 낮고 응집도..

공부하기 2021.01.15

GetMessage함수, PeekMessage함수

Windows 데스크톱 애플리케이션으로 프로젝트를 만들면 기본적으로 GetMessage 함수로 프로그램이 작성되있다. 이 Getmessage라는 함수는 메세지가 발생할때까지 멈춰있는 함수로 메세지가 발생하면 프로그램이 돌아가는 방식이다. 실시간으로 처리되는 게임에는 사용이 불가능하다고 볼 수 있다. 그래서 PeekMessage라는 함수를 사용하는데 이 PeekMessage 함수는 자기를 실행할때마다 메세지가 없으면 그냥 리턴되어버린다. 즉, 메세지가 없는 시간에 프로그램이 돌아가고 이를 데드타임이라고 한다. while(true) { if(0 != PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&m..

WinAPI 2021.01.15