728x90
반응형
http://www.soen.kr/ 에서 다운받은 예제 소스에서 첫번째 폴더의 First.cpp 사용
- 앞으로의 기본형 소스
- 기본형을 쓰라면 이 소스를 작성한다
- 헤더파일은 windows.h 하나만
- LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
- LRESULT: long 형 반환값
- CALLBACK
- 컴파일 후 사라진다
- 어셈블리 단계에서는 의미가 없다
- 이걸 지워도 동작함
- 운영체제가 호출하는 함수
- 프로그램 내부에서는 호출되지 않음
- 함수 call 방식을 결정(cdecl이나 stdcall)
- HWND
- 윈도우 핸들러(int 형 정수)
- WPARAM
- unsigned int 형(4byte)
- LPARAM
- long 형(4byte)
- int가 16bit이던 시절에 32bit로 쓰다가 32비트로 넘어와서 int가 4byte가 되어서도 그대로 유지
- HINSTANCE g_hInst;
- HINSTANCE: 자료형의 일종
- LPSTR lpszClass="First";
- LPSTR
- char *
- lpsz
- null로 끝나는 문자열의 포인터라는 뜻
- lp : long pointer
- s : string
- z : zero
- int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance ,LPSTR lpszCmdParam,int nCmdShow)
- APIENTRY
- 이 소스의 entry point
- 컴파일할 때 없어짐
- 함수의 call 방식을 define하고 컴파일러에게 알려줌
- hInstance
- hPrevInstance
- 안쓰지만 옛날에 썼던게 남아있는거
- lpszCmdParam
- C 프로그램에서 argv랑 같은 기능
- nCmdShow
- 창을 화면에 보일 것인가 결정
- HWND hWnd;
- 윈도우 핸들러
- MSG Message;
- WNDCLASS WndClass;
- 생성하는 윈도우의 정보를 가지고 있는 구조체
- g_hInst=hInstance;
- 다른 함수들이 hInstance에 접근할 수 있게 전역변수 g_hInst에 저장
- WndClass : 윈도우 정보를 초기화
- hbrBackground
- 윈도우 창의 색깔
- hCursor
- 마우스 모양
- hIcon
- 윈도우 창 좌측 상단의 아이콘
- hInstance
- 윈도우의 첫번째 인자를 세팅한다
- lpfnWndProc
- lpfn: 함수 포인터
- 함수의 주소를 넣는다
- 운영체제는 어플리케이션에 마우스의 위치 정보 등을 전한다
- 이를 메시지라 한다
- 해당 어플리케이션을 클릭하거나 마우스를 그 위로 지나갈 때 어플리케이션에 메시지를 전송
- 어플리케이션이 해당 동작에 맞는 기능을 수행하도록 한다
- 오토 마우스같은 경우에는 윈도우 디바이스 드라이버를 설치하여 구현
- lpfnWndProc은 운영체제에서 날아오는 메시지를 처리할 함수를 설정한다
- 함수 이름은 WndProc 이외에 다른 것으로 해도 된다
- lpszClassName
- 실행 중인 윈도우 창의 소속을 구분하기위해 설정
- 예를 들어 메모장에서 파생된 찾기, 다른이름으로 저장 창은 모두 메모장과 같은 lpszClassName을 가진다
- lpszMenu
- 메뉴 창
- style
- RegisterClass(&WndClass);
- WndClass 구조체의 정보대로 윈도우 창을 만들기위해 윈도우 운영체제에 등록하는 함수
- 이 이후로 WndClass는 쓸모가 없다
- hWnd=CreateWindow( lpszClass,
lpszClass, - 상단에 표시되는 창의 이름
WS_OVERLAPPEDWINDOW, - 윈도우 모양을 좌우한다(soen의 API 초급강좌 2-3-마 윈도우 스타일에서 확인할 수 있다)
CW_USEDEFAULT, - 창의 가로, 세로 크기를 결정
DW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
(HMENU)NULL,
hInstance,
NULL); - 나중에 실습하면서 다시 볼거임
- ShowWindow(hWnd,nCmdShow);
- 창이 화면에 나타날지를 결정(2번째 인자 nCmdShow가 결정)
- nCmdShow : WinMain의 4번째 인자, 창의 표시를 결정
- while문
- GetMessage(&Message,0,0,0)
- 윈도우가 보내는 메시지를 받는 함수
- 메시지 큐에서 있는 메시지 중 가장 오래된 메시지를 가져와서 Message 변수에 저장한다.
- 마우스의 움직임, 화면의 움직임 등 모든 정보를 처리하기위해 윈도우에서 많은 양의 메시지를 보낸다
- 윈도우가 보내는 메시지는 메시지 큐에 저장되는데 이것은 원형 큐 형태를 가지고 있다
- 윈도우가 보내는 메시지가 어플이 저장하고 있는 최대 메시지양보다 더 많이 들어오면, 어플이 보관하고 있는 가장 오래된 메시지는 삭제된다
- 창을 종료시키면 0을 반환하고 프로그램이 종료된다
- TranslateMessage(&Message);
- 키 입력을 해석
- 예) 키보드 입력 신호에서 A,a,ㅁ 구분
- DispatchMessage(&Message);
- 윈도우가 처리하고 남은 쓰레기를 넘긴다
- 윈도우에 처리 상황을 보고 하면 윈도우가 WndProc을 호출
- return Message.wParam;
- 리턴값이 윈도우 로그에 남는다
- LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
- 어떤 일을 할지를 정하는 함수
- WinMain이 껍데기고 이 함수가 핵심
- iMessage
- 이벤트 정보(메시지 번호)
- 이 값에 따라 수행할 작업을 결정한다
- WM_DESTROY
- WM: Window Message의 약자
- 창을 종료시킬 때 발생하는 메시지
- 창을 닫기 전에 어떤 일을 처리하기 위해서 종료신호도 메시지로 처리
- PostQuitMessage(0)
- 윈도우 메시지 큐에 0을 대입한다
- GetMessage에서 0이 반환됨
- WinMain의 while문이 종료되며 프로그램 종료
- 큐
- First In First Out 개념의 자료 구조
- 기본 소스로 예제 소스 컴파일
- Visual Studio 2013에서 WIin32 프로젝트를 생성 후, 위의 소스를 붙여 Ctrl+F5로 컴파일
- 기본창이 실행되는 것을 확인한다
728x90
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151112_안향진_API_01 (5) | 2015.11.13 |
---|---|
20151112-김재홍-win32API_1일차-첫번째예제 (3) | 2015.11.13 |
20151112 - WinAPI 첫시간 일지 엄민웅 (5) | 2015.11.13 |
20151112_박서연_WinAPI_1 (4) | 2015.11.12 |
20151112 -여지윤- 업무일지 - 라즈베리파이,Win32 API (7) | 2015.11.12 |
20151111 엄민웅 업무일지 영상처리 축소 (13) | 2015.11.11 |
20151110 안향진 영상처리 대칭, 회전 (9) | 2015.11.11 |
20151109_13번_일일업무일지_박서연_영상처리(패딩, RGB컨트롤,히스토그램평활화) (10) | 2015.11.09 |