WinAPI 27

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

더블버퍼링

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

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

Rectangle 함수

SetPixel 함수는 일단 느리고 각종 도형과 이미지를 출력하기 위한 다양함 함수를 지원하고 있으며 SetPixel과 같이 한픽셀씩 표현하는 것보다 훨씬 빠르다. 여기서 이미지 역시 단순히 이미지로 보는것이 아니라 데이터로 볼 수 있다는 것이다. 하나하나 데이터로서 2차원배열의 데이터값이다. 사각형을 표현하는 함수중에는 Rectangle 함수가 있다. 인자값으로는 HDC,left,top,right,bottom 으로 왼쪽 위를 시작으로 right 값만큼 이동한 좌표와 bottom 값만큼 아래로 이동한 좌표값을 서로 이어서 사각형을 만들어 준다. 즉, 왼쪽위의 좌표가 중심점이 된다. Rectangle(HDC,100,100,200,200) 이렇게 하면 실제로는 100,100 크기의 사각형이 나온다.

WinAPI 2021.01.14

HDC , GetDC 함수, 윈도우(창) 표현,SetPixel 함수

Window(OS) 는 대부분이 핸들을 우리에게 제공한다. (커서 핸들,메뉴 핸들, 다이얼로그 핸들 등등..) HDC는 Handle to a Device Context 로 윈도우 화면에 대한 픽셀정보에 접근할 수 있는 권한 핸들이다. 이 권한을 얻어오는 함수가 GetDC 함수이고 인자값으로는 HWND를 요구한다. 윈도우(OS)한테 부탁해서 화면의 픽셀에 접근할 수 있는 권한을 얻어온다. API에서 윈도우(창)을 띄울때에도 윈도우(OS)는 이 창의 크기를 알고있고 그렇기 때문에 그 크기에 맞게 색을 표현하고 우리에게는 그렇게 만들어진 창이 보이는 것이고 그렇다는건 창의 크기가 어딘가에 저장되어 있다는 뜻이다. 만약 이 창의 크기를 수정하고 싶다면 윈도우(OS)는 나에게 그걸 수정할 수 있는 권한을 요구한다..

WinAPI 2021.01.14