본문 바로가기
컴퓨터과학[2-1]/knou_[2-1]Visual_C

Visual C++ 3강 소스코드 살펴보기

by boolean 2015. 1. 10.
728x90

Visual C++ 3강 소스코드 살펴보기

  1. WinMain 함수의 본체는 윈도우 클래스(WNDCLASS) 정의 및 속성 입력, 윈도우 클래스 등록(RegisterClass), 윈도우 객체 생성(CreateWindow), 화면에 윈도우 보이기(ShowWindo) 그리고 지속적으로 윈도우를 화면에 나타내기 위한 Message Loop (while(GetMessage(&Message,0,0,0)) )등으로 구성된다.
  2. 윈도우 클래스 WndClass의 각 멤버 의미는 다음과 같다.
  • style : 윈도우의 스타일을 정의한다.
  • lpfnWndProc : 윈도우의 메시지 핸들러 함수를 지정한다.
  • cbClsExtra, cbWndExtra : 일종의 예약 영역이다.
  • hInstance : 이 윈도우 클래스를 사용하는 프로그램의 번호이며 매개변수로 전달된 hInstance값을 그대로 대입해주면 된다.
  • hIcon, hCursor : 이 윈도우가 사용할 마우스 커서와 최소화되었을 경우 출력될 아이콘을 지정한다.
  • hbrBackground : 윈도우의 배경 색상을 지정한다.
  • pszMenuName : 이 프로그램이 사용할 메뉴를 지정한다.
  • lpszClassName :윈도우 클래스의 이름을 정의한다.
  1. 윈도우를 생성할 때는 CreateWindow 함수를 사용하는데 각 매개 변수는 다음과 같다.
  • lpszClassName : 윈도우의 클래스를 지정하는 문자열이다.
  • lpszWindowName : 윈도우의 타이틀 바에 나타날 문자열이다.
  • dwStyle : 윈도우의 형태를 지정하는 매개변수다. WS_OVERLAPPEDWINDOW를 사용하면 시스템 메뉴, 최대 최소 버튼, 타이틀 바, 경계선을 가진 윈도우를 만들어 준다.
  • X, Y, nWidth, nHeight : 윈도우의 크기와 위치를 지정하며 픽셀 단위를 사용한다. x, y좌표는 화면 좌상단 좌표이며 nWidth는 넓이 nHeight는 높이이다.
  • hWndParent : 부모 윈도우가 있을 경우 부모 윈도우의 핸들이다.
  • hmenu : 윈도우에서 사용할 메뉴의 핸들을 지정한다.
  • hinst :윈도우를 만드는 주체, 즉 프로그램의 핸들을 지정한다. 여기서는 매개변수로 전달된 hInstance이다.
  • lpvParam :CREATESTRUCT라는 구조체의 번지이며 특수한 목적에 사용된다. 보통은 NULL값을 사용한다.
  1. 윈도우를 화면에 보이게 하기 위하여 ShowWindow 함수를 사용하는데 매크로 상수는 다음과 같다.
  • SW_HIDE 윈도우를 숨긴다.
  • SW_MINIMIZE 윈도우를 최소화시키고 활성화시키지 않는다.
  • SW_RESTORE 윈도우를 활성화시킨다.
  • SW_SHOW 윈도우를 활성화시켜 보여준다.
  • SW_SHOWNORMAL 윈도우를 활성화시켜 보여준다.
  1. 윈도우가 계속 화면에 나타나게 하려면 다음과 같이 메시지 루프를 수행해야 한다.
while(GetMessage(&Message,0,0,0)) 
      {
      TranslateMessage(&Message);
      DispatchMessage(&Message);
      }
각 함수의 역할은 다음과 같다.
  • BOOL GetMessage( ); : 이 함수는 시스템이 유지하는 메시지 큐에서 메시지를 읽어 들인다.
  • BOOL TranslateMessage( CONST MSG *lpMsg); : 키보드 입력 메시지를 가공하여 프로그램에서 쉽게 쓸 수 있도록 해 준다.
  • LONG DispatchMessage( CONST MSG *lpmsg); :시스템 메시지 큐에서 꺼낸 메시지를 프로그램의 메시지 핸들러 함수(WndProc)로 전달한다.
  • MSG구조체 : 실제 메시지 처리는 메시지 처리 함수인 콜백함수(WndProc)에서 수행한다. 메시지는 MSG라는 구조체에 보관되며 MSG 구조체 각 멤버의 역할은 다음과 같다.
Hwnd 메시지를 받을 윈도우 핸들이다.
message 어떤 종류의 메시지인가를 나타낸다. 가장 중요한 값이다.
wParam 전달된 메시지에 대한 부가적인 정보를 가진다. 어떤 의미를 가지는가는 메시지 별로 다르다. 32비트 값이다.
lParam 전달된 메시지에 대한 부가적인 정보를 가진다. 어떤 의미를 가지는가는 메시지 별로 다르다. 32비트 값이다.
Time 메시지가 발생한 시간이다.
Pt 메시지가 발생했을 때의 마우스 위치이다.
  1. 윈도우 프로시저(Window Procedure)는 메시지 핸들러 함수로 메시지가 발생할 때 프로그램의 반응을 처리하는 일을 하며 WinMain 함수와는 별도로 WndProc이라는 이름으로 존재한다. WndProc은 WinMain에서 호출하는 것이 아니라 윈도우 운영체제에 의해 호출된다. WinMain내의 메시지 루프는 메시지를 메시지 핸들러 함수로 보내주기만 할 뿐이며 WndProc은 메시지가 입력되면 윈도우 운영체제에 의해 호출되어 메시지를 처리한다. 이렇게 운영체제에 의해 호출되는 응용 프로그램내의 함수를 콜백(CallBack)함수라고 한다.
  2. 콜백(Callback) 함수 또는 윈도우 프로시저 함수 WndProc의 구조는 대체로 다음과 같은 형태를 가진다. 메시지의 종류에 따라 다중 분기하여 메시지 별로 처리를 진행한다.
switch(iMessage)
      {
      case Msg1:
      처리1;
      return 0;
      case Msg2:
      처리2;
      return 0;
      .
      .
      .
      case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
      }
      return(DefWindowProc(hWnd,iMessage,wParam,lParam));
      } 


댓글