컴퓨터 공부/Win32 API 프로그래밍

[4월 28일 2교시] WinMain 기본 프로그램 분석2

려리군 2009. 4. 28. 15:28

1. 윈도우 설계도 작성

WndClass.cbClsExtra=0;

WndClass.cbWndExtra=0;

WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);

  윈도우의 배경색으로 쓸 색깔을 정함.

  브러쉬 핸들을 리턴받기 위해 (HBRUSH)로 casting한다.

  GetStockObject : 이미 생성(윈도우 부팅시)된 GDI객체를 가져온다.


WndClass.hCursor = LoadCursor(NULL,IDC_ARROW);  

WndClass.hIcon = LoadCursor(NULL,IDI_APPLICATION);  

  HINSTANCE 인자의 NULL의 의미는 시스템 전역에 있는 변수를 사용한다는 뜻.

  시스템 전역에 있는 마우스 커서와 아이콘을 불러온다.


WndClass.hInstance = hInstance;


WndClass.lpfnWndProc = (WNDPROC)WndProc;

  윈도우 프로시저 등록.

WndClass.lpszClassName = lpszClass;

  윈도우를 생성할 때 설계도의 이름이 CreateWindow인수와 같아야 프로그램이 잘 수행된다.

WndClass.lpszMenuName = NULL;

  메뉴를 등록.

WndClass.style = CS_HREDRAW|CS_VREDRAW;

  수직 수평으로 윈도우 크기가 변경되었을 때 다시 그려준다.


RegisterClass(&WndClass);

  윈도우즈 운영체제에 설계도를 등록한다.


2. 윈도우 생성

hWnd = CreateWindow(...);

설계도를 바탕으로 윈도우를 생성한다.

lpszClassName(1번째 인수) : 설계도 상 클래스 이름과 반드시 같아야 한다.

lpszWindowName(2번째 인수) : 윈도우 캡션 이름

dwStyle(3번째 인수) : 생성할 윈도우의 스타일.

x,y,width,height(4,5,6,7인수) : 윈도우의 위치와 크기를 설정.

...

ShowWindow(...);

윈도우를 보여준다.

hWnd : 윈도우 핸들.

nCmdShow : 윈도우를 보여줄 형태(최대화, 최소화, 숨김등)를 정함.


3. 메세지 가져오기(루프)

GetMessage(&Message,0,0,0);

운영체제로부터 하나의 메세지를 가져온다.

WM_QUIT메세지가 오지 않는 이상 TRUE를 리턴한다.

TranslateMessage(&Message);

WM_KEYDOWN을 키보드 기능에 맞게 WM_CHAR 메세지를 발생하게 한다.

DispatchMessage(&Message);

Dispatch의 뜻 : 하드웨어 resource(CPU, Memory...)에 시간을 할당한다. 운영체제 scheduler에 의해 시간을 할당하게 됨.

메세지를 WndProc에 전달.


윈도우 프로시저 분석

switch(iMessage)

{

case WM_DESTROY:

//             WM_DESTROY : 윈도우(만) 파괴될 때 메세지 발생.


PostQuitMessage(0);

//             Post의 뜻 : 메세지 큐에 메세지를 넣는다.(enqueue)

//             PostQuitMessage(0) : 종료메세지(WM_QUIT)를 큐에 넣는다. wParam값으로 종료코드인 0을 인수로 넣었다.

//             return Message.wParam; 에서 윈도우가 종료할 때 이 0 값이 사용된다.


return 0;

}

return DefWindowProc(hWnd,iMessage,wParam,lParam);

//              Def의 뜻 : Default

//              다른 종류의 메세지가 왔을 경우 DefWindowProc함수가 처리해 준다.


ㅁ Portable Executable(PE)

 - MZ : magic code, number

 - PE 실행파일의 구조는 Header, Text(Code), Data, resource, import(dll파일 사용시)로 구성된다.

 - Header 부분에는 각 section의 시작주소 등의 정보가 있다.