본문 바로가기
코스웨어/11년 내장형하드웨어

[내장형]한원우_8월 19일 일일보고서

by 알 수 없는 사용자 2011. 8. 21.
728x90
반응형

내 수준에는 난이도 별 다섯 개.

하지만 아주 기본이 되는 문제라며 툭 던져 주고 간 과제.

실행파일을 실행하면..

첫 화면

아무 키나 막 눌렀을 때 메뉴가 뜬다.

메모리에 적재하는 화면.

하지만 주어진 소스는 기능이 비어있는 썰렁한 소스뿐... 첫 화면만 뜬다. 다들 화이팅!!

 

원도우즈 API

리소스를 사용할 때 핸들을 받는다. 핸들은 부호 없는 정수값. 핸들을 이용하여 소스에 접근.

핸들(handle)이란 구체적인 어떤 대상에 붙여진 번호이며 문법적으로는 32비트의 정수 값이다.

자세한 내용은 http://www.winapi.co.kr/를 참고하자!!

C언어를 할 때 #include <stdio.h>와 같다고 생각하면 된다.

윈도우를 만드는 과정

중요한 부분이니 기억하고 있으면 좋을 거 같다.

First.cpp 소스 분석

   1:  #include <windows.h>
   2:   
   3:  LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
   4:  HINSTANCE g_hInst;
   5:  LPCTSTR lpszClass = TEXT("First");
   6:   
   7:  //=============시작==============//
   8:  int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevlnstance, LPSTR lpszCmdParam,int nCmdShow)
   9:  {
  10:      HWND hWnd;
  11:      MSG Message;
  12:      WNDCLASS WndClass;
  13:      g_hInst = hInstance;
  14:      /*============WndClass 정의(원도우의 속성 설정)========================*/
  15:      WndClass.cbClsExtra = 0;                                        //
  16:      WndClass.cbWndExtra = 0;                                        //
  17:      WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);    //
  18:      WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);                    //    
  19:      WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);                //
  20:      WndClass.hInstance = hInstance;                                    //    
  21:      WndClass.lpfnWndProc = WndProc;                                    //
  22:      WndClass.lpszClassName = lpszClass;                                //
  23:      WndClass.lpszMenuName = NULL;                                    //
  24:      WndClass.style = CS_HREDRAW|CS_VREDRAW;
  25:      
  26:      /*=========================클래스를 동록===============================*/ 
  27:      RegisterClass(&WndClass);                    
  28:          
  29:      /*====================메모리상에 윈도우를 생성=========================*/
  30:      hWnd = CreateWindow(lpszClass, lpszClass, WS_HSCROLL|WS_VSCROLL,    
  31:          CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
  32:          NULL,(HMENU)NULL,hInstance,NULL);
  33:   
  34:      /*========================윈도우 화면에 출력===========================*/
  35:      ShowWindow(hWnd, nCmdShow);                                            
  36:      
  37:      /*===========================메세지 루프===============================*/
  38:      while(GetMessage(&Message, NULL, 0,0))                        
  39:      {                                                            
  40:          TranslateMessage(&Message);                            
  41:          DispatchMessage(&Message);                            
  42:      }                                                        
  43:      return (int)Message.wParam;                                
  44:  }
  45:   
  46:  LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM IParam)
  47:  {
  48:      switch(iMessage)
  49:      {
  50:          case WM_DESTROY:
  51:              PostQuitMessage(0);
  52:              return 0;
  53:      }
  54:      return(DefWindowProc(hWnd, iMessage, wParam, IParam));
  55:  }

헤더파일

windows.h 헤더 파일은 기본적인 데이터 타입, 함수 원형 등을 정의하며

그 외 필요한 헤더파일을 포함하고 있다.

그래서 윈도우즈 프로그램의 첫 줄은 거의 #include <windows.h>로 시작된다.

시작점

윈도우즈 프로그램의 시작점은 main이 아닌 WinMain이다. 원형은 다음과 같다.

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance

,LPSTR lpszCmdParam,int nCmdShow)

main 함수는 인수 사용여부에 따라 여러 가지 원형이 있지만

WinMain의 원형은 위와 같이 고정되어 있다. 각 인수의 의미는 다음과 같다.

 

메시지 처리 함수

윈도우즈에서는 특별한 경우를 제외하고는 이 두 개의 함수가 존재해야 한다.

하나는 WinMain이고 또 하나는 WndProc이다.

WinMain에서는 윈도우를 만들고 화면에 출력하기만 할 뿐이며 대부분의 일은 WndProc에서

이루어진다. WinMain은 프로그램을 시작시키기만 하며 실질적인 처리는 대부분 WndProc에서

이루어진다. 그래서 소스를 분석할 때 주의깊게 봐야 할 부분은 WinMain이 아니라 WndProc이다.

WinMain 바로 윗부분에 WndProc 함수의 원형이 선언되어 있다.

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

좀 더 자세한 분석은 책을 보며 각자 살살 해보자.


Welcome to YogaWorld.

반갑습니다.

자~ 스트레칭.. 위로 쭈욱~ 계속 올라가세요~

옆구리 늘려주고~ 쭉쭉~

팔 스트레칭하고

목 운동. 천천히 호흡에 맞춰서 위 아래로

이번엔 목 돌리기

어깨 위아래로 돌려주고

팔 앞으로 나란히 한쪽 팔이 반대편으로 넘어가 하나 둘..

자~ 손 모아 쥐고 돌려 주세요~ 안쪽 바깥쪽~

바닥이 정면을 향하게 해서 팔 쭈욱~ 앞으로 펴서 등을 계속 밀어주세요~

그리고 바닥에 손 닿아 구부리세요~

자~ 한발 앞으로 뒷쪽 무릎 구부리고 앞발 끝 들고 앉아 앞으로 나란히..

앞으로 나갔던 발 뒤로 보내서 이번엔 뒷꿈치 들고 척추 펴진 상태에서 그대로 앉기..

선 활 자세(자세시 주의사항. 흔들리지 않는 것을 쳐다보자)

태양경배자세

체어 트위스트 자세

포워드 폴드 요가자세

현자세

박쥐자세 전 스트레칭

박쥐자세

영웅자세(보통의 남자가 하기 힘든 자세)

낙타자세(?)

골반 들어올리기.

쟁기자세

물고기자세

제일 좋다. 송장자세..


728x90