티스토리 뷰

1. API.

1. 특징.

1. WBCS를 사용.

2. 메시지 구동 시스템

2. 주요 개념.

1. 메세지.[각주:1]

1. GetMessage 함수.[각주:2]

1. 메세지 큐에서 메세지를 읽음.

2. 메세지를 처리하고 삭제.

2. PeekMessage 함수.[각주:3]

1. 메세지 큐에서 메세지의 정보만 읽음.

2. 메세지를 삭제하지 않음.

3. PM_REMOVE.

4. 훔쳐보는 메세지가 없으면 0값을 반환.

3. TranslateMessage 함수.[각주:4]

4. DispatchMessage 함수.[각주:5]

5. 메세지 큐.

 

2. 핸들.[각주:6]

1. void* 타입.

2. 응용 프로그램마다 독립적인 창을 의미.

3. 주요 변수.

1. hInstance.

1. 같은 응용 프로그램마다 독립적인 창을 의미.

2. WPARAM.

1. 키보드에 대한 정보.

3. LPARAM.

1. 마우스에 대한 정보.

4. time.

1. 메세지 타임에 대한 정보.

5. POINT.

1. 마우스 위치에 대한 정보.

6. 함수 호출 규약.

#define CALLBACK    __stdcall
#define WINAPI      __stdcall
#define WINAPIV     __cdecl
#define APIENTRY    WINAPI
#define APIPRIVATE  __stdcall
#define PASCAL      __stdcall

 

1. stdcall.

1. 시스템이 제공하는 함수.

2. 가변 인자 허용 불가.

 

3. 기타.

1.창 사이즈.

1. 800 * 600을 기준으로 작성.

2. 과거의 프로그램과 리소스들이 위의 창 사이즈를 기준으로 제작.

3. 작업 영역.[각주:7]

4. 비작업 영역.[각주:8]

5. 선 중복.

1. 선의 충돌을 판별하기 위해 중복을 방지.

6. SetTimer 함수.

1. 세번째 인수 uElapase는 1/1000초 단위로 타이머의 주기를 설정.

7. InvalidateRect 함수.

1. 함수로 변경된 부분을 무효화하여 WM_PAINT 메시지를 통해 화면을 다시 그림.

2. 세번째 인수 bErase를 TRUE로 설정해 주어야 이전에 출력되어 있던 부분을 무시.

8. 더블 버퍼링.

1. 화면 출력의 깜박임을 해결할 수 있는 근본적이고도 완전한 방법.

2. 서로 다른 DC를 교환.

9. 구조.

1. Initialize 함수.

2. Process 함수.

3. Render 함수.

4. Release 함수.

1. 소멸자에서 직접적으로 동적 할당을 해제x.

2. Release 함수를 소멸자에서 호출하여 디버깅에 도움.

10. 도형.

1. 중점과 크기로 구성.

2. 충돌을 판별에 용이.

11. 입력.

1. GetKeyState 함수.

2. GetAsyncKeyState 함수.

3. GetAsyncKeyState 함수와 GetKeyState 함수의 차이.

1. GetAsyncKeyState함수의 반환값.

12. 충돌.

1. IntersectRect 함수.

1. 첫번째 인수는 겹치는 사각형을 의미.

2. 겹치는 사각형이 발생은 충돌을 의미.

13. 마우스.

1. GetCursorPos 함수.[각주:9]

2. ScreenToClient 함수.[각주:10]

14. CRTDBG.

1. 메모리 누수를 점검.

2. 가장 나중에 포함해야 안정적으로 처리 가능.

15. _DEBUG.

1. 속성에 전처리기로 정의.

 

3. DC.[각주:11]

1. GetDC 함수.

2. ReleaseDC 함수.[각주:12]

3. DeleteDC 함수.[각주:13]

4. DC도 메모리를 차지하므로 할당 후 해제 원칙이 반드시 준수.
 

4. 메세지.

1. WM_CREATE.

1.CreateWindow(Ex) 함수에 의해 윈도우가 생성될 때 호출.

2. 한 번 호출.

3. 주로 윈도우에 관련된 초기화 작업을 할 때 사용.

 

5. 핸들.

1. 포함.

1. 불러오는 개념x.

2. 복사 & 붙여넣기 개념o.

2. extern 키워드.[각주:14]

1. 전역 변수의 범위는 선언된 파일.

2. 포함을 통해 복사 & 붙여넣기를 통해 증가하는 메모리를 막기 위해서 모든 파일에 공유되는 변수들은 extern으로 선언.

3. 윈도우 핸들.

HWND g_hWnd;
 
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
	HWND hWnd;
 
	hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, 
		CW_USEDEFAULT, 0, rc.right - rc.left, rc.bottom - rc.top, 
		NULL, NULL, hInstance, NULL);
 
	if (!hWnd)
	{
		return FALSE;
	}
	g_hWnd = hWnd;

	return TRUE;
}

 

 

6. 화면.

1. 시작 점 위치에 따른 비율의 왜곡.

RECT rc = {0, 0, SCREEN_X, SCREEN_Y};
 
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, 
					CW_USEDEFAULT, 0, rc.right - rc.left, rc.bottom - rc.top, 
					NULL, NULL, hInstance, NULL);

 

2. AdjustWindowRect 함수.

AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, false);

 

1. 세번째 인수 bMenu는  메뉴가 있으면 true를 전달하고 그렇지 않으면 false를 전달.

 

8. Tick.

1. GetTickCount.

1. 1/1000초 단위로 타이머의 주기를 설정.

2. 시스템의 속도에 영향을 받음.

2. 쿼리 퍼포먼스 카운트.

3. 프레임.

1. GetTickCount.

2. 쿼리 퍼포먼스 카운트.

9. SAFE_DELETE.

1. 매크로 함수.

//매크로 함수.
#define SAFE_DELETE(p)  if(p)   { delete p; p = NULL; }

 

1. 단점.

1. 코드 비대화.

2. 컴파일 타임에 오류 탐지 불가.

2. 장점.

1. 모든 타입에 호환.

2. 함수 템플릿.

//함수 템플릿.
template
static void SAFE_DELETE(T& Temp)
{
    if (Temp)
    {   
        delete Temp;
        Temp = NULL;
    }
}

 

1. static 키워드를 통해 코드 비대화를 방지.

2. :: 연산자를 통해 명시적으로 static 키워드의 사용을 알림.

3. & 참조자는 댕글린 포인터를 방지.

CObj* pObj = new CPlayer;
::SAFE_DELETE(pObj);            //복사 생성.
 
template
static void SAFE_DELETE(T Temp)
{
    if (Temp)
    {
        delete Temp;  //복사된 객체 삭제.
        Temp = NULL;  //복사된 객체 초기화.
    }
}
 
CObj* pObj = new CPlayer;		//댕글린 포인터.
::SAFE_DELETE(pObj);            //복사 생성.

 

3. 함수 객체.

//함수 객체.
struct SAFE_DELETE
{
    template
    void operator()(T& Temp)
    {
        delete Temp;
        Temp = NULL;
    }
};

 

 

10. for_each문.

for_each(m_pObj.begin(), m_pObj.end(), SAFE_DELETE());

 

1. 알고리즘 헤더가 필요.

2. 조건자로서 함수 포인터 또는 함수 객체를 사용.

3. 단, for_each문의 조건자는

 

11. 디자인 패턴.

1. 추상 팩토리 패턴.

1. 객체의 생성을 위한 패턴.

2. 반복자 패턴.

1. 자세한 표현방법을 나타내지 않고 객체집합의 요소들을 순차적으로 접근하는데 사용.

3. 브릿지 패턴.

1. 불렛 매니저.

4. 옵저버 패턴.

5. 컴포지트 패턴.

6. 상태 패턴.

1. 씬 매니저.

7. 중재자 패턴.[각주:15]

8. 싱글톤 패턴.

1. 생성자와 소멸자의 접근 제어 지시자는 private.

2. 싱글톤은 초기화 문법을 이용하여 사용.

1. 내부 작동을 줄임.

3. 삭제 함수.

6. 기타.

1. 모든 디자인 패턴은 장점과 단점을 소유.

2. 완벽한 패턴은 존재x.


12. API 파일 입출력.

1. HANDLE 타입.

2. CreateFile 함수.

3. WriteFile 함수.

4. ReadFile 함수.

5. CloseHandle 함수.

6. 파일 크기.

1. 바이트 크기.

2. EOF.

 

13. 스크롤링.

if (m_tInfo.tPos.fX > SCREEN_X)
{
    if (m_tInfo.tPos.fX > 0.0f - m_fSpeed)
    {
        if (m_tInfo.tPos.fX < 0.0f)
            m_tInfo.tPos.fX = 0.0f;
        return;
    }
 
    m_tInfo.tPos.fX += m_fSpeed; 
}

 

1, 스크롤링.

1. 감소.

2. 오프셋.

1. 증가.

3. 플레이어.

1. 증가.

4. 배경 이동.

 

14. 뷰포트.

1. 카메라 이동.

 

15. 이미지.

1. 계층.

1. 파일에 대한 정보.

2. 픽셀 값.

3. 높이맵에서 활용.

2. 크기.

1. x값 * y값 * RGB값(3) + 알파.

3. 함수.

1. BitBlt 함수.

2. TransparentBlt 함수.

1. #pragma comment(lib, "msimg32.lib").

2. 오직 하나의 RGB값을 삭제.

4. 관리.

1. 벡터.

1. 삽입과 삭제가 용이.

2. 많은 자료 관리가 불편.

2. 맵.

1. 삽입과 삭제가 불편.

2. 검색이 용이.

3. 기타.

1. string과 TCHAR*의 차이.

1. string은 문자열을 직접 비교.

2. TCHAR*는 주소 값을 비교.

 

  1. 메시지란? 사용자나 시스템 내부적인 동작에 의해 발생된 일체의 변화에 대한 정보를 말한다. [본문으로]
  2. GetMessge란? 새로운 메시지가 발생할 때까지 대기하고, 다음으로 넘어가지 않는 다. [본문으로]
  3. PeekMessage란? 메시지가 있으면 처리하고, 없으면 즉시 다음으로 넘어간다. [본문으로]
  4. TranslateMessage란? 유니 코드를 아스키 코드로 변환한다. [본문으로]
  5. DispatchMessage란? 윈도우 프로시저 함수를 호출한다. [본문으로]
  6. 핸들이란? 구체적인 어떤 대상에 붙여진 번호이며 문법적으로는 32비트의 정수값이다. [본문으로]
  7. 작업 영역이란? 쉽게 말해서 윈도우 중앙의 흰 부분을 말하며 비작업 영역이란 그 외의 영역을 말한다. [본문으로]
  8. 비작업 영역이란? 타이틀 바와 경계선이 있고 메뉴가 있을 경우 메뉴도 비작업 영역에 속한다. [본문으로]
  9. GetCursorPos란? 마우스의 스크린 좌표 값을 가져온다. [본문으로]
  10. ScreenToClient란? 스크린 좌표 값을 클라이언트 좌표 값으로 변환한다. [본문으로]
  11. 1.DC란? 출력에 필요한 모든 정보를 가지는 데이터 구조체이며 GDI 모듈에 의해 관리된다. [본문으로]
  12. ReleaseDC란? DC에 대한 권한을 삭제한다. [본문으로]
  13. DeleteDC란? DC 자체를 삭제한다. [본문으로]
  14. extern키워드란? 동일한 이름의 변수를 다른 파일에서도 사용할 수 있도록 만든다. [본문으로]
  15. 중재자 패턴이란? M:N의 관계를 M:1의 관계로 복잡도를 낮추는 패턴이다. [본문으로]

'복습 > 3개월차' 카테고리의 다른 글

2016/05/19  (0) 2016.05.19
2016/05/18  (0) 2016.05.18
2016/05/13  (0) 2016.05.13
2016/05/12  (0) 2016.05.12
2016/05/11  (0) 2016.05.11
댓글
공지사항