728x90
반응형
728x90
반응형

--

플레이어에서 4개의 배열을 선언한다

반드시 원점으로 가야된다 

그리고 난후에 제자리로 돌아가게 해야한다 무조건

 

로컬좌표 - 각 객체의 좌표

월드좌표 - 월드세계의 좌표

 

 

m_vPoint[i] += m_tInfo.vPos 가 원점에서 각 객체에 다시 뿌려주는 코드

Look벡터로 방향을 조정하는구나 

 

시작점이 원점이었으면 vTemp -= 가 필요없다 

 

 

 

 

방향백터가 아니니까 Coord 를 사용

Coord 는 위치벡터 나머지는 싹다 Normal

 

***원점기준으로 변환이 이루어진다 ***

 

--

MFC - Microsoft Foundation Class

API와의 차이점은 c기반과 c++의 차이

 

단일문서 - visual studio같은거(뷰가 하나)

다중문서 - 포토샵의 형태(뷰가 여러개)

 

구글에 MFC구성이라고 치면 이미지 나옴

 

장점

계층구조

부모의 기능을 물려받음

 

단점

부피가 커짐

--

 

cWnd 핸들을 가지고 있다 

 

CallBack 함수는....................이벤트가 발생했을때 호출당하는 함수 (이벤트를 처리해주기 위함)

 

 

BEGIN_MESSAGE_MAP  ~  END_MESSAGE_MAP 가 이벤트 처리

 

 

dc를 쓰지않고 device를 쓴다 

 

장치를 사용하기 위해서는 장치에 대한 조사가 필요하다 그 후에 사용이 가능하다 

 

LPDIRECT3D9 장치 조사

LPDIRECT3DDEVICE9 장치를 사용할 수 있게 해준다 

 

m_p3D = 함수로 초기화 한다 (알아서 상황에 맞게 초기화 해준다)

 

-- 

 

E_FAIL

 

Afx는 MFC 전용함수들

 

D2D 에서는 자동으로 백버퍼를 제공해준다 오 좋다

 

무조건 모니터에서 제공하는 해상도의 사이즈로 설정해야 한다 !! 아니면 해상도가 어긋날 수 있다 .

 

멀티 샘플링 - 굴곡진 선을 부드러운 선으로 만들어줌 (속도가 느려서 안씀)

 

스텐실 버퍼 - 거울효과 같은걸  말한다.

 

Windowed = TRUE ( 창모드 하겠다)

 

스왑체인 - 그림을 뿌리는 방식 (우리는 전면 버퍼만 보게 된다. ) 

 

주사율 - 1초에 그리는 횟수 (우리는 보통 1초에 30정도를 볼 수 있다 )

 

싱글톤은 원래 생성자가 있고 클래스가 기본적으로 만드는 생성자가 3개다 

 

생성한 역순으로 지우자 !

 

 
728x90
반응형

'back-end > MFC' 카테고리의 다른 글

7. 회전,이동,크기 조절  (0) 2023.07.24
6. 삼각함수 법칙  (0) 2023.07.24
5. D3DXVec3Transform 세가지 함수  (0) 2023.07.24
4. D3DXVec3TransformCoord 함수  (0) 2023.07.24
3. d2d  (0) 2023.07.24
728x90
반응형

--

tagInfo에 pos와 Dir, Look (항상 0도를 바라보는 방향백터다) 추가

 

기본적으로 Look백터와 연산한다

 

내적을 할때는 항상 두 백터가 단위백터야 한다 .

 

 

ex)))

두 개의 백터를 내적한다고 치자 

 

v1 v2 cos세타 를 곱하면 

 

여기서 v1과 v2가 단위백터라면 v1 v2 cos세타를 연산하면 그 결과 자체가 cos세타가 나온다 

 

Look벡터를 (1, 0 , 0)으로 해 놓으면 그 자체가 단위백터가 된다는 뜻이다 

 

--

 

4 x 4 행렬을 사용하겠다 

행렬 왜쓰냐?

- 백터에서 표현할 수 있는게 위치 , 방향, 룩 백터 등이 있고

- 행렬로는 크기 ,  회전 , 이동 을 표현한다

 

백터로 플레이어로 이미 움직였는데 왜 행렬로 이동을 하느냐?

 - 행렬의 곱셈의 특성상 여러가지 상태를 하나의 행렬로 합칠 수 있다. 

 

 

--

 

월드행렬 =  스케일링 * 자전 * 이동 * 공전 * 부모

 

각 단어의 의미

스케일링은 크기를 의미

자전은 스스로 도는 것을 의미

이동은 말 그대로 위치 이동을 의미

공전을 어떤 축을 기준으로 그 축을 돈다

부모는 어떤 축을 기준으로 얼마나 떨어져있는지 의미(위치를 의미)

 

 

--

 

항등행렬은 0으로 값을 초기화 하면안된다 -> 왜냐면 각 자리마다 상태값을 가지고 있기 때문에 0으로 하면 상태가 사라짐

D3DXMatrixIdentitiy(&행렬)->항등행렬 초기화 하는 행렬

 

 

D3DXMatrixScaling(&matScale , x , y , x); 크기변환행렬-> 인자값이 비율로 들어온다 

(1, 1, 1)로 들어오면 크기가 그대로 유지 ( 2 , 2 , 2)로 들어오면 2배의 크기가 된다.

따라서 이미지가 한장만 있어도 다 표현이 가능하다

 

D3DXMatrixTranslation(&matTrans , x , y , x) 이동행렬 -> 백터에서 취기와 크기 방향을 표현하지만

연산의 간편화를 위해서 사용한다. 객체에 대한 모든 변화을 수행한 후에 행렬에 담아 사용한다. 

x,y,z는 백터의 x, 백터의 y , 백터의 z가 들어간다 .(백터에서 미리 이동을 모조리 끝내고 적용만 하는것이다 )

 

 

 

--

 

Z축 회전 행렬

 

(xcos세타 - ysin세타  xsin세타 + ycos세타)

 

 

--

 

백터와 행렬의 곱셈

 

 

백터는 (x,y,z) 인데 우리가 쓰는 행렬은 4x4의 행렬이다

숫자가 맞지않기 때문에 

임의로 백터를 (x,y,z,w)로 맞춰 4x4와 곱셈이 가능하도록 변경

이 임의에 w에 1이 들어갈때와 0이 들어갈때는 값이 다르다 

 

TransformCoord(에는 위치이동행렬에 사용 w가 1이 들어갈때) 위치 적용

 

TransformNormal(에는 0이 들어간다) 위치 미적용 - Normal을 좀 많이씀 - 단위백터화 시키는 함수다 (헤더 추가해야됨)

 

--

 

MoveTo로 사각형을 그리고

포신을 돌리자

w a s d 로 몸체를 돌리자

 

회전행렬 공식 이용 ( z축 회전공식 )

 

--

728x90
반응형

'back-end > MFC' 카테고리의 다른 글

8. 종합 mfc  (0) 2023.07.24
6. 삼각함수 법칙  (0) 2023.07.24
5. D3DXVec3Transform 세가지 함수  (0) 2023.07.24
4. D3DXVec3TransformCoord 함수  (0) 2023.07.24
3. d2d  (0) 2023.07.24
728x90
반응형

API와 차이점은 좌표를 사용하는것이 벡터와 행렬을 사용한다.

앞으로 사용할 2.5D ~ 3D에서 사용할 좌표를 공부한다. 

잘 기억해 두기를 바래

 

기본이 되는 백터와 행렬 !!

 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

백터는 크기와 방향을 가진다. 

3D에서 가장 기본이 되는 단위 float형 3개가 들어가있다

'위치'는 백터의 성분이 아니다 

 

그렇지만 위치는 프로그래밍적으로 표현을 한다

각성분의 제곱 해서 더하면 -> 백터의 크기

 

참고 - 크기 = 힘 = 길이 = 스칼라

 

백터 상등 - 서로 다른 위치에 있는 같은 크기의 백터는 같다. 

 

백터의 차는 교환법칙 성립x - (방향이 달라질 수 있다.)

 

백터의 정규화( 단위 백터 ) - 따라가거나 바라보는 방향을 알고자 할때

 

 

m_vPos가 위치백터

m_vDir가 방향백터

 

 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

백터의 외적    안쓴다

 

두개의 백터의 수직인 백터를 구하기 위해 외적을 사용

곱하는 순서 : 위 아래 순으로 곱하면 왼쪽으로 수직인 백터

   중 요      아래 위 순으로 곱하면 오른쪽으로 수직인 백터 왼손법칙 사용

 

 

 

***백터의 내적***

 

두 백터의 사잇각

 

x * x + y * y + z + z = x * x * y * y * cos세타

 

제 1코사인 법칙 - 한각의 크기가 90도를 넘지 않는 삼각형이고 b의 길이와 c의 길이를 알고 있을때 a의 길이를 구하는 공식

 

a = x + y

x = b * cosC

y = c * cosB

 

제 1코사인 법칙 (위에 3줄은 a 변에 대한 과정 )

 

a = b * cosC + c * cosB

b = c * cosA + a * cosC

c = a * cosB + b * cosA

 

제 2코사인 법칙 - 두 변과 끼인각을 알고 있을 때

 

a * a = b * b + c * c - 2bccosA

b * b = a * a + c * c - 2accosA

c * c = a * a + b * b - 2abcosA

 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////

D3DXVec3Length(&방향백터) - 백터의 길이를 구함

D3DXVec3Normalize(&결과백터 , &방향백터) - 단위 백터화 

D3DXVec3Dot(&백터 , &백터) - 내적 

D3DXVec3Cross(&결과백터 , &백터 , &백터) - 외적

 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

728x90
반응형

'back-end > MFC' 카테고리의 다른 글

8. 종합 mfc  (0) 2023.07.24
7. 회전,이동,크기 조절  (0) 2023.07.24
5. D3DXVec3Transform 세가지 함수  (0) 2023.07.24
4. D3DXVec3TransformCoord 함수  (0) 2023.07.24
3. d2d  (0) 2023.07.24
728x90
반응형
  1. D3DXVec3TransformCoord

 

D3DXVECTOR3 *WINAPI D3DXVec3TransformCoord(      

    D3DXVECTOR3 *pOut,
    CONST D3DXVECTOR3 *
pV,
    CONST D3DXMATRIX *
pM
);

 

  • 파라미터

 

  • 반환값

 

  1. D3DXVec3TransformNormal

 

D3DXVECTOR3 *WINAPI D3DXVec3TransformNormal(      

    D3DXVECTOR3 *pOut,
    CONST D3DXVECTOR3 *
pV,
    CONST D3DXMATRIX *
pM
);

 

  • 파라미터
  • 반환값

 

  1. D3DXVec4Transform

 

 

D3DXVECTOR4 *WINAPI D3DXVec3Transform(      

    D3DXVECTOR4 *pOut,
    CONST D3DXVECTOR3 *
pV,
    CONST D3DXMATRIX *
pM
);

  • 파라미터

 

  • 반환값
728x90
반응형

'back-end > MFC' 카테고리의 다른 글

7. 회전,이동,크기 조절  (0) 2023.07.24
6. 삼각함수 법칙  (0) 2023.07.24
4. D3DXVec3TransformCoord 함수  (0) 2023.07.24
3. d2d  (0) 2023.07.24
2. 행렬  (0) 2023.07.24
728x90
반응형

101227 D3DXVec3TransformCoord함수

1. D3DXVec3TransformCoord(D3DXVECTOR3* pOut, const D3DXVECTOR* pV, D3DXMATRIX* pM)

D3DX = 다이렉트3DX
Vec3 = 3차원벡터
Transform = 변형
Coord = 네이버로검색해보니 조정하다 와 비슷한 개념의 뜻이 나온다.

1)첫번째 인자값 : 3차원백터와 4x4행렬의 연산의 결과행렬이 저장될 벡터의 
                  주소값을 넣어준다.

2)두번째 인자값 : 연산을 수행할 3차원벡터의 주소값을 넣어준다.
3)세번째 인자값 : 연산을 수행할 4x4행렬의 주소값을 넣어준다.

4)하는일 : 
 => 3차원벡터(1x3 행렬) 와 4x4행렬이 수학적으로는 연산이 불가능하다.
    그래서 다이렉트 이 함수를 통해 에서 3차원벡터 맨끝에 1을 추가해줌으로써 
    1x4행렬로 만들어준다. 
    그래서 3차원벡터와 4x4행렬의 연산이 가능하게 해준다.
    결과값으로는 1x4 행렬이 나오겠지만 저장되는 값은 3차원 행렬이므로
    1x3 행렬이 저장된다.
       
5)사용빈도 : 
 => 개체의 각도이동이나, 개체의 각도미사일이동,
 그리고 카메라의 유연한 이동을 위해 자주 쓰이는 함수이다.

 

이미지 출력은 2가지가 있다.

싱글텍스쳐랑 , 멀티텍스쳐가 잇다.

싱글텍스쳐 - 한장짜리 이미지 출력

멀티텍스쳐 - 여러장의 이미지 출력 ( 한장짜리이미지가 여러개있는거)

문자열의 원시버퍼


D3DXCreateTextureFromFileEx
1. 디바이스
2. 파일의경로
3. 이미지의 가로사이즈
4. 이미지의 세로사이즈
5. mipLevels
6. 0
7. 포멧형식 ( png , jpg 이런거)
8. D3DPOOL_MANAGED = 그래픽카드 이미지공간이 꽉차면 다음이미지부터 시스

템  메모리에 보관된다.
9. 테두리표현
10. 확대축소했을때 출력
11. NULL
12. 이미지에 대한 정보를 어디에다가 담을지
13. NULL
14. 어디에 이미지를 보관할지 

728x90
반응형

'back-end > MFC' 카테고리의 다른 글

6. 삼각함수 법칙  (0) 2023.07.24
5. D3DXVec3Transform 세가지 함수  (0) 2023.07.24
3. d2d  (0) 2023.07.24
2. 행렬  (0) 2023.07.24
1. 벡터란?  (0) 2023.07.21
728x90
반응형

d2d에서는 알아서 백버퍼를 알아서해준다.

 

백버퍼는 모니터가 지원되는 해상도로 해야한다.

 

멀티샘플링은 선이 자연스럽지만 느려서 사용하지 않는다.

 

스텐실버퍼는 거울효과 같은걸 말한다.

 

스왑체인 =  그림을 뿌리는 방식 ( 버퍼를 두개만들어 계속 교환하면서 전면에 보이게한다. ) 

 

반드시 생성한 역순으로 지워줘야한다.

728x90
반응형

'back-end > MFC' 카테고리의 다른 글

6. 삼각함수 법칙  (0) 2023.07.24
5. D3DXVec3Transform 세가지 함수  (0) 2023.07.24
4. D3DXVec3TransformCoord 함수  (0) 2023.07.24
2. 행렬  (0) 2023.07.24
1. 벡터란?  (0) 2023.07.21
728x90
반응형

실수형 데이터가 16개 들어가있음

 

4행 4열 짜리 행열만 쓴다.

 

매트릭스만 쓴다.

 

행렬은 크기 , 회전 , 이동

 

여러가지 상태를 하나의 행렬로 합칠수가 있다.

 

벡터를 이용하여 모든연산을 끝내놓고, 

 

그다음에 행렬하나에 모든상태를 합친다. 그래서 행렬을 사용하는 이유다.

 

행렬의 곱셈의 특성을 이용하는것이다.

 

정방행렬  = 행과 열의 갯수가 같은 것을 정방 행렬이라 한다.

 

벡터도 행렬로 표현할 수 있다.

 

행렬의 곱셈에서 교환 법칙은 성립하지 않을 수 있다.

 

행렬의 곱셈은 객체의 상태를 합칠 때 사용된다.

 

행렬의 곱셈은 교환 법칙이 성립하지 않을 수 있기 때문에 

 

곱하는 순서가 매우 중요하다.

 

월드 행렬 = 스케일링 * 자전 * 이동 * 공전 * 부모

 

스케일링 = 크기

 

자전 = 스스로 도는거

 

이동 = 이동

 

공전 = 어느 축을 기준으로 도는거

 

부모 = 어느 축을 기준으로 얼머나 떨어져있는지 의미

 

항등행렬 = 행렬을 초기화 할때 1을 넣어서 곱셈을 햇을때 아무런 변화가 없는거,

D3DXMatrixIdentity (&행렬)

 

크기변환 행렬 = 인자값이 비율이 들어온다. 

D3DxMatrixScaling(&MatScale,x,y,z)

 

 

이동행렬 = 객체를 이동 시키기 위한 행렬

D3DXMatrixTranslation(&MatTrans,x,y,z)

 

728x90
반응형

'back-end > MFC' 카테고리의 다른 글

6. 삼각함수 법칙  (0) 2023.07.24
5. D3DXVec3Transform 세가지 함수  (0) 2023.07.24
4. D3DXVec3TransformCoord 함수  (0) 2023.07.24
3. d2d  (0) 2023.07.24
1. 벡터란?  (0) 2023.07.21
728x90
반응형

벡터와  행렬을 사용하여 2.5D , 3D에서 사용할 좌표나 벡터나 행렬을 배운다.

 

졸업할 때까지 쓴다. 그러니 잊어먹으면 안된다.

 

==============================================================================

 

벡터는 크기와 방향을 가진다.

 

벡터 = 크기와 방향을 가진 성분,

 

위치는 벡터의 성분이 아니다.

 

벡터의 크기는 스칼라 값으로 나타낸다.

 

크기 = 힘 = 길이 = 스칼라값

 

벡터상등 : 위치는 벡터의 성분이 아니기 때문에 서로 다른 위치에 있는 같은 크기의 벡터는 같다.

 

벡터의 차 : W = A - B   벡터의차는 교환법칙이 성립이 되질 않는다.

 

B에서 A를 바라본다. 

 

단위벡터 : 방향은 주어진 벡터와 같고, 크기가 1인 벡터 

 

단위벡터 = 벡터의 정규화

 

루트34는 벡터의 크기임

 

 

D3DXVECTOR3()

 

 

m_vPos 위치벡터

 

m_vDir 반환벡터

 

 

 

D3DXVECTOR3는 x y z 로 선언되어있음

 

 

용책 , 해골책 참고

 

포인터벡터 , 위치벡터 를 나타내지만 수학쪽에서는 위치는 벡터의 성분이 아니다.

 

 

 

 

==============================================================================

 

벡터의 외적 = 일반적으로 두벡터의 수직인 벡터를 구하기위해 사용한다.

 

제 1COS 법칙 = 한각의 크기가 90도를 넘지 않는 삼각형이 있고, B의 길이와 C의 길이를 알고 있을때 A의 길이를 구하는 공식

 

a = x +y

 

x = b. cos C

 

y = c . cos B

 

a = b. cos C + c. cos B

 

b = c . cos A + a . cos C

 

c = a . cos B + b . cos A

 

 

제 2COS 법칙  = b의 길이와 c의 길이를  알고 있고 , 낀각 A를 알고 있을때 a의 길이를 구하는 방법

 

제 1COS법칙으로 부터 제2COS 법칙을 유도해 낼수 있다.

 

 

벡터관련함수

 

D3DXVec3Length(&방향벡터)  = 벡터의 길이를 구한다.

 

D3DXVec3Nomalize(&결과벡터, &방향벡터) = 단위 벡터화 한다.

 

D3DXVec3Dot(&벡터 , &벡터)  = 내적

 

D3DXVec3Cross(&결과벡터, &벡터, &벡터)  = 외적

728x90
반응형

'back-end > MFC' 카테고리의 다른 글

6. 삼각함수 법칙  (0) 2023.07.24
5. D3DXVec3Transform 세가지 함수  (0) 2023.07.24
4. D3DXVec3TransformCoord 함수  (0) 2023.07.24
3. d2d  (0) 2023.07.24
2. 행렬  (0) 2023.07.24
728x90
반응형

HDC GetDC(HWND hWnd);

 

MSDN 명시

HDC GetDC(_In_ HWND hWnd);

 

DC는 주로 하나의 윈도우와 연관되는 출력 정보를 가진다.

GetDC 함수는 hWnd가 가리키는 윈도우에 적당한 DC를 만들어 그 핸들을 리턴한다.

DC도 메모리를 차지하므로 할당 후 해제 원칙이 반드시 준수되어야 한다.(ReleaseDC)

 

함수가 성공적으로 실행되면 리턴되는 값은 지정된 윈도우의 클라이언트 영역에 대한 DC의 핸들을 리턴.

함수가 실패하면 리턴되는 값은 NULL.

 

ReleaseDC 함수 포스트 링크

http://blog.naver.com/kojy258/80209104883

 

사용예제 포스트 링크

http://blog.naver.com/kojy258/80209103519

 

최소지원 클라이언트 - 윈도우 2000 프로페셔널(데스크탑 전용)

최소지원 서버 - 윈도우 2000 서버(데스크탑 전용)

필요 헤더 - Winuser.h(Windows.h에 포함)

필요 라이브러리 - User32.lib

필요 DLL - User32.dll

 

GetDC( )   와  BeginPaint( ) 의 차이는 뭘까? 

 

API 에서 기본적으로 메세지루프가 돌 때 GetMessage( ) 함수에서 메세지를 읽어들이고, 삭제를 반복한다.

이러한 메세지중 WM_PAINT 메세지는 윈도우에 무효화 현상이 생길때 발생한다.

 

 
WM_PAINT 메세지란?​
 
WM_PAINT 메시지는 윈도우를 다시 그려야할 때 발생하는 메시지이다.  

WM_PAINT 메시지가 발생하는 경우로는 무효화 현상일 발생할 때 이다.

 

무효화란?

현재 그려진 이미지와 실제 이미지가 차이가 생길 뜻한다.

예를들어 다른 윈도우가 현재 윈도우를 가렸다가 치운다면 그리지 않던부분을 다시 그려줘야할 필요가 생긴다.

 

1) 윈도우가 처음 만들어져 사용자 눈에 보일 때

2) 윈도우가 다른 위도우에 가려졌다가 환원될 때

3) 윈도우의 크기를 조절할 때

4) 사용자의 함수호출에 의해 : Invalidate(), UpdateAllViews, InvalidateRect() 등

 

 

 

이때 WinProc( ) 함수에서 WM_PAINT 메세지 발생 시, BeginPaint 함수로 DC 를 얻어오는데, GetDC 로 사용할 순 없을까?

대답은 GetDC ㄴㄴ

이유인 즉, BeginDC( ) 함수가 실행될 때 내부적으로 WM_PAINT 메세지를 처리하고 윈도우를 유효화 상태로 만들기 때문.

만약 GetDC 를 사용하게 되면 WM_PAINT 메세지가 처리되지 않아 유효화 상태에서도 끈임없이 화면을 그리게 될 것이다.

 

즉, WM_PAINT 메세지가 발생 했을 때 사용하도록 만들어진 것이 BeginPaint( ) 함수.

이외에 따로 DC 만 얻어와야 할 때 쓰는 것이 GetDC 함수이다.

 

 

 

 

사용자정의 클래스에서 DC 얻기.

 

1. GetDC( ) 함수의 인자로 해당 윈도우의 핸들이 필요하다.

    따라서 핸들정보를 전역적으로 사용하기위한 변수를 하나 선언.

 

2. InitInstance( ) 함수에서 CreateWindow 함수의 반환값인 핸들을 전역변수(extern 선언된 변수) 에 저장.

 

3. GetDC( ) 함수의 인자로 전역으로 선언해논 핸들을 인자값으로 줘서 DC를 가져옴.

 

 

소멸자기준으로 동적할당 해제보다는 함수로인해서 해제하면 디버깅을 할 수 있다.

 

define에 쓰이는 extern 변수는 전체에 쓸수 있다.

 

FPS : 초당 몇프레임을 표현할지 정해주는 것이다.

 

GetTickCount : rand보다는 정교하고 난수를 가져온다. 

728x90
반응형
728x90
반응형

1. GetMessage()

메시지 큐에서 메시지를 꺼내온다. 그리고 그 메시지를 TranslateMessage로 보내는데..

그런데 만약에 WM_QUIT를 만나면, false를 리턴하여 바로 while문을 탈출한다.

WM_QUIT를 만나지 않았다면, 그 메시지를 TranslateMessage로 보낸다.

 

 

 

 

2. TranslagteMessage()

가상 키를 키보드로 눌렀을때 문자열 값이면 WM_CHAR로 보낸다.

아니면 DispatchMessage로 보낸다.

 

 

 

 

3. DispatchMessage()

윈도우 메시지를 WndProc로 보낸다.

 

 

 

 

4. WM_TIMER

사용자의 동작과 상관없이 발생하는 메시지이다.

한번 지정해 놓으면 일정한 시간 간격을 두고, 연속적으로 계속 발생한다.

 

 

 

 

5. 타이머를 생성하는 함수

UINT SetTimer( HWND hWnd, UINT nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc );

nIDEvent = 타이머의 번호

uElapse = 타이머의 주기 (단위는 1/1000 초)

lpTimerFunc = TimerPROC 콜백 함수의 주소 값.

 

5 - 1) 타이머를 제거하는 함수

BOOL KillTimer( HWND hWnd, UINT uIDEvent );

hWnd = 타이머를 소유한 윈도우의 핸들 값

uIDEvent = 타이머의 ID를 넣는다.

 

5 - 2) 현재 시간을 불러오는 함수

void WINAPI GetLocalTime( LPSYSTEMTIME lpSystemTime );

lpSystemTime = SYSTEMTIME의 구조체의 주소 값을 넣는다.

 

 

 

 

6. WM_LBUTTONUP, WM_LBUTTONDOWN

WM_LBUTTONUP : 마우스를 띄었을때 발생한다.

WM_LBUTTONDOWN : 마우스를 눌렀을때 발생한다.

 

 

 

 

7. WM_KEYDOWN, WM_CHAR 각각 설명과 차이점.

7 - 1) WM_KEYDOWN

nonsystem key가 눌러졌을때 키보드 포커스와 함께 해당 윈도우로 보내지는 메시지이다.

nonsystem key라고 하면 ALT를 누르지 않고, 그냥 키를 누른 것을 의미한다.

 

7 - 2) WM_CHAR

WndProc의 wParam에 해당 키의 문자 코드가 저장 된다.

 

 

 

 

8. WM_PAINT를 강제로 발생 시키는 함수와 인자에 대한 설명!!

InvalidateRect( hWnd, lpRect, true );

InvalidateRect( hWnd, NULL, false );

lpRect = 작업 영역

NULL  = 화면 전체

ture    = 그 영역을 싹다 지워서 다시 그린다.

false   = 새로 작업하는 영역을 갱신되고, 나머지 영역은 그대로 둔다.

 

 

 

 

9. HDC를 얻는 2가지의 방법

1) HDC GetDC( HWND hWnd );

    int ReleaseDC( HWND hWnd, HDC hDC );

 

2) HDC beginPaint( HWND hWnd, LPPAINTSTRUCT lpPaint );

    BOOL EndPaint( HWND hWnd, CONST PAINTSTRUCT *lpPaint );

 

 

 

 

10. 강제로 윈도우를 종료 시키는 함수

PostQuitMessage();

 

 

 

 

11. DC( Device Context )

출력에 필요한 모든 정보를 가지는 데이터 구조체이다.

 

 

 

 

12. 마우스가 움직일때 발생되는 이벤트 메시지를 쓰고, 좌표 얻는 방법에 대한 설명!!

(이벤트 메시지)

WM_MOUSEMOVE

 

(좌표를 얻는 방법)

X = LOWORD(lParam)

Y = HIWORD(lParam)

 

 

 

 

13. 사각형의 충돌체크에 사용되는 함수를 쓰고, 각각의 인자를 설명!!

bool IntersectRect( &rc, &rcPlayer, &rcMonster );

(충돌이 아닐 경우) false IntersectRect( &rc, &rcPlayer, &rcMonster );

(충돌이 있을 경우) true IntersectRect( &rc, &rcPlayer, &rcMonster );

lpRect = 충돌 체크 할 사각형.

POINT = 충돌 체크 할 점(좌표).

 

 

 

 

14. 점과 사각형의 충돌 체크에 사용되는 함수를 쓰고, 각각의 인자를 설명 하시오.

bool    PtInRect( lpRect, POINT );

(충돌이 아닐 경우) false  PtInRect( lpRect, POINT );

(충돌이 있을 경우) true   PtInRect( lpRect, POINT );

lpRect = 충돌 체크 할 사각형.

POINT = 충돌 체크 할 점 (좌표)

 

 

 

 

15. RECT

top, bottom, left, right (좌표)를 가진 구조체

 

 

 

 

16. 선

시작점  :  MovetoEx( hdc, x, y, NULL );

끝   점  :  LineTo( hdc, x, y );

원   형  :  Ellipse( hdc, left, top, right, bottom );

사각형  :  Ractangle( hdc, left, top, right, bottom );

문자열 입력  :  TextOut( hdc, x, y, "문자열", strlen("문자열") );

 

 

 

 

17. 클라이언트 영역이란? 

작업이 진행되는 작업 영역을 뜻 한다.

즉! 윈도우 영역에서 캡션바나 프레임부분을 뺀 영역이라고 말할 수 있다.

 

 

 

 

18. 윈도우 구조 5단계

WndClass 정의     -   윈도우를 정의한다.

RegisterClass      -   윈도우를 등록한다.

CreateWindow      -   윈도우를 만든다.

ShowWindow       -   윈도우를 보여준다.

메시지 루프          -   메시지를 처리한다. 

 

 

 

 

19. CALLBACK  WndProc (콜백함수)

보통 함수들은 운영체제가 제공하며, 프로그램에서는 이 함수들을 호출해서 운영체제의 서비스를 받는다.

즉, 응용 프로그램이 운영체제에 내장된 함수를 호출하여 작업을 한다.

콜백함수의 호출시점은 운영체제가 필요할때 호출하는 함수이다.

일반 함수와 다른 점을 명시하자.

 

728x90
반응형

'back-end > C & API' 카테고리의 다른 글

window api GetDc() 함수  (0) 2023.07.21
window api RECT 관련 API 함수들  (0) 2023.07.21
window api GetCurPos, ScreenToClient  (0) 2023.07.21
window api wsprintf 와 swprintf의 차이점  (0) 2023.07.21
리스트 간단 설명 요약  (0) 2023.07.21

+ Recent posts

728x90
반응형