전체 글 71

MoveToEx함수,LineTo 함수

API에서 사용하는 함수로 GDI는 텍스트 모드의 커서에 해당하는 CP가 있는데 MoveToEX 함수는 그 CP의 위치를 지정해주는 함수이고 LineTo 함수는 CP의 위치에서 지정한 위치까지 선을 그어주고 CP의 위치도 지정한 위치의 좌표로 이동된다. MoveToEX 함수의 인자로는 DC의 핸들인 HDC와 x, y의 좌표 그리고 이동전의 CP값인데 필요없을 경우에 NULL을 입력해준다 LineTo 함수의 인자로는 HDC와 x, y 의 좌표값을 넣어주면 된다. MoveToEx(HDC, 100, 100, NULL); LineTo(HDC, 100, 200); LineTo(HDC, 200, 200); LineTo(HDC, 200, 100); LineTo(HDC, 100, 100); 이렇게 작성하면 100,10..

공부하기 2021.01.14

float

실수를 표현하는 기본 자료형으로 float을 사용할 때 상수로서 사용하고 싶다면 정수부분.실수부분 f 이렇게 사용한다. 0.5를 표현하고 싶다면 정수부분 . 실수부분 f 0 . 5 f 즉, 0.5f 이렇게 사용하면 된다. float을 사용할 때 주의할 점은 int main() { float X = 10.0f; X = X + 0.1f; } 이렇게 사용할 때 값을 확인해보면 X는 10.1이 아니라 10.1000004 라고 나온다. 즉, 실수 연산은 실수가 하나라도 들어가면 조금의 오차가 생긴다는 것이다. 연산 속도 역시 정수보다 느리다.실수를 표현한다는 것 자체가 연산이기 때문이다.

C 2021.01.14

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

함수 선언 뒤에 const 키워드

class A { public: int m_Number; public: void Func() { m_Number; } public: A(int _Number) : m_Number(_Number) { } }; 위의 코드에서 Func 함수의 m_Number에는 this가 생략되어 있다.사실 this->m_Number이며 this는 A* const 이다. 그렇기 때문에 this = nullptr; 이 코드는 불가능. 복습) int* const Ptr = nullptr; Ptr = nullptr // 불가능 포인터가 가리키는 주소값이 const가 된다. void Func() const { } 이렇게 함수 선언 뒤에 const를 붙이면 여기서의 this는 const A* const가 된다. 즉 가리키는 주소와 실..

WinAPI 2021.01.14

복습) 지역 변수

지역 변수는 지역이 끝날때 사라진다. int* Test() { int A = 100; return &A; } int main() { int* b = Test(); } 위의 코드는 문법적으로 문제도 없고 실행해서 값을 확인해보면 b의 변수에는 100의 값이 들어가 있다. 그렇지만 이는 치명적으로 잘못 생각하고 있는 경우이다. 메모리로 보면 이런 상황이 된다. 즉 값이 100으로 들어 올수도 있지만 어떤 값이 들어올지 모르고 이상한 값이 들어와도 전혀 이상할게 없는 경우이다. 안전하게 처리하려면 새로운 메모리를 만들어 내서 리턴해주면 된다.

WinAPI 2021.01.14

문자열의 처리방법(와이드 바이트, 멀티 바이트)

문자열의 처리방법에는 2가지가 있다. 와이드 바이트와 멀티 바이트. 멀티 바이트 : 아스키 코드에 해당하는 문자는 1바이트 한글이나 특수기호는 2바이트로 처리 와이드 바이트 : 모든 문자를 2바이트로 처리 c++ 에서는 2가지 문자열의 차이를 표현하기 위해서 wchar_t 와 char 자료형이 있다. char의 표현 방법은 "" 으로 멀티 바이트 wctar_t의 표현 방법은 L""으로 와이드 바이트

WinAPI 2021.01.14

SOLID 원칙(객체지향 디자인의 5원칙)

좋은 객체지향 설계를 위해서는 다음의 5가지 원칙을 따르는 것이 좋다. 이 객체지향 5가지의 원칙의 앞글자를 따서 SOLID 라고 한다. S - SRP(Single responsibility principle) 단일 책임 원칙 - 모든 클래스는 단 하나의 책임을 가진다.즉, 클래스를 수정할 이유가 오직 하나여야만 한다는 뜻. Ex) 계산기 클래스가 있을때, 계산을 하는 책임과 GUI를 나타내는 책임은 서로 분리되어야 한다. O - OCP(Open Closed Principle) 개방 - 폐쇄 원칙 - 확장에 대해서는 개방 되어 있어야 하지만 수정에 대해서는 폐쇄 되어야 한다. Ex)캐릭터를 하나 생성한다고 가정할때 각각의 캐릭터가 움직임이 다를 경우 움직임의 패턴 구현을 하위 클래스에 맡긴다면 캐릭터 클..

공부하기 2021.01.14

폴더 경로, #include "",<> 의미

폴더경로를 나타낼때 . 의 의미는 자기 자신을 나타내는 의미이다. 최상위 폴더인 드라이브 폴더를 제외하고는 자신을 가지고 있는 부모(상위)폴더를 가지고 있다. .. 의 의미는 자기의 상위폴더를 의미한다. #include 문법에서 : 비주얼 스튜디오의 포함디렉터리에 넣어준 내용들은 를 사용해서 포함시킨다. "" : 같은 프로젝트나 폴더내부에 있는 헤더는 ""을 사용해서 포함시킨다. 경로 설정은 프로젝트 -> 속성 -> VC++ 디렉터리 -> 포함 디렉터리 에서 가능하다.

WinAPI 2021.01.12