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의 시작주소 등의 정보가 있다.
'컴퓨터 공부 > Win32 API 프로그래밍' 카테고리의 다른 글
[4월 29일 1교시] 입력1 (0) | 2009.04.29 |
---|---|
[4월 28일 3교시] 출력(DC) (0) | 2009.04.28 |
[4월 28일 1교시] WinMain 기본 프로그램 분석1 (0) | 2009.04.28 |
[4월 27일 3교시] (0) | 2009.04.27 |
[4월 27일 2교시] 윈도우즈 개요 (0) | 2009.04.27 |