#include <windows.h>
//함수 원형 LRESULT(int형,windows.h에 디파인 되어있다) CALLBACK은 컴파일하면 없어진다
LRESULT CALLBACK WndProc(HWND,UINT, WPARAM, LPARAM);
//전역 변수 선언부분 h=handeler
HINSTANCE g_hInst;
//long pointer string zero = lpsz(널로 끝나는 문자열)
//LPSTR은 Long Pointer STRING 이므로 char *를 뜻한다 보면 된다.
LPSTR lpszClass="First";
//APIENTRY 엔트리 포인트라는 표시(STDCALL CDECLCALL 인지 표시하는 역할도 한다)
//두번째 인자는 안쓰는 것이다.(옛날에 쓰던것) 세번째 인자는 명령어를 입력받는 인자이다.
//네번째 인자는 화면에 보여줄것인지 말것인지를 정하는 인자
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{
//PASS
HWND hWnd;
//PASS
MSG Message;
//클레스라고 적혀있지만 구조체이다.
WNDCLASS WndClass;
//다른 함수들이 가능하도록 winmain에서 받는 첫번째 인자를 전역 변수에 저장한다.
g_hInst=hInstance;
//구조체는 윈도우의 정보를 다들고 있다.
//구조체를 초기화 시켜준다
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
//실행 창의 배경화면을 설정(여기선 하얀색으로 설정)
WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
//커서의 설정
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
//창이 뜨면 맨왼쪽 위에 뜨는 아이콘을 설정한다.
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
//구조체 안에 메인에 첫번째 인자를 넣어줘야 한다.
WndClass.hInstance=hInstance;
//함수 주소를 넣는 자리 lpfn(Long pointer function)
WndClass.lpfnWndProc=(WNDPROC)WndProc;
//실행중인 한덩어리를 Class라 부른다. 전역변수가 들어갔으므로 First
WndClass.lpszClassName=lpszClass;
//메뉴를 추가하면 NULL자리에 넣어주면 된다
WndClass.lpszMenuName=NULL;
//윈도우 가로세로 크기의 조절이 가능한걸 설정한다.
WndClass.style=CS_HREDRAW | CS_VREDRAW;
//위의 구조체를 윈도우에 등록하는 함수이다.
//위의 선언해주고 RegisterClass함수로 등록을 해야지 제대로 윈도우에 들어간다.
//위의 구조체는 이 함수를 사용하고나면 사용가치가 없다.
RegisterClass(&WndClass);
//첫번째 Class 이름을 적는것, 두번째 인자는 창이 뜨면 창에 표시될 이름 메모장의 경우는 메모장이라고 뜨겠지
//세번째 윈도우 모양을 설정한다 define 되어있다.
//4,5,6,7번째 인자는 가로크기 세로크기를 설정한다0을 넣으면 운영체제가 알아서 설정해준다.
//4,5은 전체 창에서의 6번째 점의 위치를 잡는 좌표이고
//6,7은 왼쪽 위 모서리의 시작점 오른쪽 밑 모서리의 시작점이다.
//나머지는 Pass
hWnd=CreateWindow( lpszClass,
lpszClass,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
(HMENU)NULL,
hInstance,
NULL);
//창이 화면에 나타날지 안나타날지 셋팅하는 함수(WinMain의 4번째 함수를 받는다)
//Main에서 셋팅해 놨으니 윈도우가 결정한다.
ShowWindow(hWnd,nCmdShow);
//while문이 도는동안 어플리케이션이 실행된다.
//while문에서 운영체제가 보내는 메세지를 받는다.
//GetMessage 함수는 메세지 큐에서 제일 오래된 메세지를 가져온다.
//창닫는 메세지가 0을 return하기 때문에 종료 조건에 &Message,0,0,0 가 있다.
//전달되 메세지를 저장하는 곳이 첫번째 인자이다.
while(GetMessage(&Message,0,0,0))
{
//키보드를 처리하는 함수
TranslateMessage(&Message);
//위에서 처리하고 남은 것들을 처리하는 함수.
//함수가 호출되면 설정해놓은 함수가 호출된다.(WndPorc)
DispatchMessage(&Message);
}
//int 형으로 반환
return Message.wParam;
}
//위의 Main함수는 전체적으로 윈도우 값을 셋팅하는 함수이고
//실질적으로 일하는 함수이다
//두번째 인자가 처리할 이벤트 번호이다.
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
switch(iMessage)
{
//창닫는 키를 누르면 메세지 큐에 0을 보내 프로그램을 종료시킨다.
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return (DefWindowProc(hWnd, iMessage, wParam,lParam));
}
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151113_임현수_업무일지_WIN32API#2 (3) | 2015.11.13 |
---|---|
20151113 - WinAPI 두번째 시간 일지 엄민웅 (수업진도 4-1-다. WM_KEYDOWN 까지) (4) | 2015.11.13 |
2015.11.13_개인업무일지_[Win32API #2]_이량경 (4) | 2015.11.13 |
20151112 - 강동조 API 개인 업무일지 (2) | 2015.11.13 |
20151112 윤재희 API #1 WinAPI 기본형 코드 (4) | 2015.11.13 |
2015-11-12 Win32 API 개인 업무일지 - 천정호 (6) | 2015.11.13 |
20151112_주재민_API_01 (4) | 2015.11.13 |
20151112_임현수_업무일지_WIN32API#1 (6) | 2015.11.13 |