dico.gif

i15947420946.gif

huuon2.gif



♨신규 게시물♨




♨신규 댓글♨




♨랭킹 TOP 30♨


  1. 사나 51,013
  2. 치즈돈가스덮밥 42,809
  3. 타이갓 42,690
  4. 달콤한 42,151
  5. 얍얍 37,292
  6. ZicP 35,207
  7. 투혼v 32,276
  8. 도리toS 27,747
  9. 헤이브로 24,790
  10. AkiREI 23,870
  11. 도리고 22,875
  12. 호날두마리치킨 17,437
  13. 깡따구 15,503
  14. 쯔쯔가무시 14,814
  15. 김돈치 14,272
  16. 키호 13,993
  17. 안인시우안 13,631
  18. 악당 13,375
  19. 개나리 12,651
  20. 코난 11,530
  21. 아싸콤 11,204
  22. 코딩충 10,360
  23. 사랑 10,195
  24. 지금몇시지 10,137
  25. 뉴비임다 9,525
  26. 규따네 9,475
  27. 브랜뉴 9,378
  28. 가다궄 9,180
  29. 반가워용 8,613
  30. 라일리 8,463

6faa2286ccd015fb37f28f688e13eac6.png

00. 크레이지 아케이드 만들기 (Win API 소개)

sacyz1n2019.08.10 09:00조회 수 107추천 수 2댓글 4

  • 1
    • 글자 크기

안녕하세요. 

 

뭐 별건 없고 크레이지 아케이드를 모작해보자! 입니다.

 

Win API + DirectX9 을 이용해서 만들어 봅시다.

 

이 강의는 C, C++, STL을 어느정도 아시는분이 보시는게 적절하다고 생각합니다.

 

먼저 Win Api를 만들어봅시다.

 

1. Microsoft Visual Studio 를 켜줍니다.

 

2. 좌측 상단에 파일 클릭 ->  새로만들기(N) -> 프로젝트(P) 를 눌러줍시다.

 

3. 그러면 아래와 같은 창이 나타납니다.

 

4. 이름은 Client, 솔루션 이름은 Framework 라고 지은 후 확인을 눌러줍니다.

 

1.PNG

 

 

5.  그냥 마침을 눌러줍시다.

 

 

2.PNG

 

6. Win API는 변수 자료형앞에 H가 붙은 자료형은 핸들(Handle) 이라고 합니다.

 

핸들은 단순 정수로 이루어져있습니다. 이  정수값은 운영체제에서 부여해주므로 저희는 이 정수값이 무엇인지 알 필요는 없습니다.

 

그리고 핸들은 비유하자면 주민등록번호와 같습니다.  즉, 나의  주민등록번호는 세상에 단 하나만 존재하듯이 핸들값 또한 단 하나만 존재해야합니다.

 

다시 말하자면 핸들값은 겹치지 않습니다. ( 겹치지 않게 운영체제가 잘 부여해줍니다.)

 

7. 그럼 밑에 처럼 HWND g_hWnd를 추가해줍시다. 이 핸들은 WND 즉 Window 핸들입니다.

 

자주 사용되므로 전역 변수를 가지도록 하겠습니다.

 

 

4.PNG

 

 

8.  윈도우의 생성 과정은 아래와 같습니다.

 

    1. 윈도우 클래스를 메모리 상에 등록한다.    

    2. 메모리상에 등록된 윈도우 클래스대로 윈도우를 생성합니다.

    3. 생성된 윈도우를 출력합니다.

 

9. MyRegisterClass는 윈도우 클래스를 등록하는 과정입니다.

  

   1. WNDCLASSEXW라는 구조체는 윈도우에 대한 특성을 담는 구조체입니다.

   2. 이 구조체로 선언한 변수에 대하여 윈도우의 특성을 정의해주고 있습니다.

   3. 마지막으로 RegisterClassExw 라는 함수는 위에서 정의한 윈도우 클래스 변수를 메모리 상에 등록시켜주는 함수입니다.

    

 

3.PNG

 

10. 메모리 상에 등록된 윈도우 클래스 대로 윈도우를 생성 후 출력해줍니다.

 

    1. g_hInst = hInstance 부분에서 프로그램 핸들을 전역변수에 저장해주고 있습니다.

    2. CreateWindowW 함수를 통하여 메모리상에 등록된 윈도우 클래스대로 윈도우를 생성해줍니다.

    3. ShowWindow 함수를 통하여 생성된 윈도우를 출력해줍니다.

 

 

5.PNG

 

11. 여긴 메시지 루프입니다. 윈도우가 생성되어 출력된 후에 들어오는 곳입니다.

   

      모든 이벤트는 메시지가 발생합니다.

      즉, 마우스를 클릭하거나 키보드를 입력하거나 마우스 휠을 움직이거나 등등 이벤트가 발생하면

     운영체제에서 메시지를 발생시킵니다. 

     발생한 메시지는 메시지큐라는 버퍼에 들어가 하나씩 하나씩 꺼내서 읽어줍니다.

 

    그리고 저희는 꺼낸 이 메시지를 가지고 상황에 알맞게 처리해줘야합니다.

 

   여기서 GetMessage라는 함수는 메시지큐에서 메시지를 꺼내주는 역활을 합니다.

    만약 메시지큐에 메시지가 없을 경우 데드락(DeadLock) 상태에 빠집니다. 즉, 메시지가 들어올 때 까지 주구장창 대기합니다.

   그리고 이 함수는 WM_QUIT 메시지를 받을 경우 FALSE를 반환합니다. ==> 루프를 탈출하게 됩니다. ==> 프로그램 종료

 

  TranslateAcccelerator는 단축키를 눌렀냐 판별하는건데 게임을 만드는데 사용하지 않기때문에 넘어갑니다.

 

  TranslatetMessage : 메시지를 해석합니다.  즉, 키보드를 눌렀는데 어떤 키를 눌렀냐 이런걸 해석합니다.

 

   DispatchMessage : 해당 메시지를 윈도우클래스에서 설정한 윈도우 프로시저 함수로 보냅니다.

                                                  ==> 윈도우 프로시저 함수에서 메시지를 상황에 맞게 처리해줍니다.

 

6.PNG

 

 다시 정리 해보자면

 

   1. 윈도우 클래스를 메모리 상에 등록합니다. 

   2. 메모리 상에 등록된 윈도우 클래스대로 윈도우를 생성합니다. (CreateWindowW)

   3. 생성한 윈도우를 출력합니다. (ShowWindow)

   4. 이후 메시지 루프에서 계속 메시지를 처리합니다.

 

추천해주신 분들

  • 1
    • 글자 크기
01. 크레이지 아케이드 만들기 (윈도우 창 보정,) (by sacyz1n) 파이썬을 이용한 간단한 메이플스토리 만들기(5/20) - 회원가입 및 로그인 기능 수정 및 다음 화면 만들기 (by 지금몇시지)

댓글 달기 WYSIWYG 사용

글쓴이 비밀번호
댓글 4
번호 제목 글쓴이 조회 수
80 [다크에덴]670 Mysql 비밀번호 변경하기 사나 6
79 디아블로3 구축법5 사나 104
78 다크에덴 670 구축법 사나 18
77 [던파]경매장 오픈하는 방법 사나 49
76 천상비 구축법7 사나 65
75 위드 구축법4 사나 54
74 Code 수정 유틸 ollydbg 사용법 뿌르뿌르 18
73 메이플 모작 진행상황 (툴)4 sacyz1n 107
72 브릿지 패턴 (Bridge Pattern)4 sacyz1n 52
71 [ubuntu] Apache2, MySQL, PHP 설치 및 MySQL 비밀번호 설정 벨루볼루 13
70 [ubuntu] MySQL Too many connections 해결1 벨루볼루 16
69 디스코드 봇 만들기 [Create Discord Bot] - 1 토끼린 42
68 파이썬을 이용한 간단한 메이플스토리 만들기(6/20) - 로그인 기능 수정및 다음화면 이미지 넣기4 지금몇시지 130
67 03. 크레이지 아케이드 만들기 (타이머 매니저, 싱글톤 패턴)4 sacyz1n 108
66 02. 크레이지 아케이드 만들기 (PeekMessage, 게임 구조) sacyz1n 50
65 01. 크레이지 아케이드 만들기 (윈도우 창 보정,)2 sacyz1n 55
00. 크레이지 아케이드 만들기 (Win API 소개)4 sacyz1n 107
63 파이썬을 이용한 간단한 메이플스토리 만들기(5/20) - 회원가입 및 로그인 기능 수정 및 다음 화면 만들기1 지금몇시지 68
62 파이썬을 이용한 간단한 메이플스토리 만들기 공지(포토샵 디자이너 모집)2 지금몇시지 96
61 배치파일로 로그기록 하기! 초코슬램 15
첨부 (1)
Framework.zip
12.58MB / Download 0
">

서버에 요청 중입니다. 잠시만 기다려 주십시오...