728x90
반응형
http://www.soen.kr/ 홈페이지 들어가서 예제 다운로드 받기
제일 첫번째 파일 분석 해보는 시간을 가졌었다.
아래는 주쌤이 수업시간 설명해주신 내용 말해주시는데로 받아 적을 수 있는 한 적은 후 소스코드 주변에 주석 처리해서 설명을 붙였다.
(저급하게 영어 한글로 발음 나는데로 적었놓았다 ;;;ㅋㅋ)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | #include<windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // LRESULT : 롱 int형이라 생각해라 // CALLBACK : 1. 뒤에서 호출한다란 의미 운영체제가 호출한다란 의미 내부적으로 사용한다는 의미가 아니고, 2.함수 호출 방식을 규약함 // HWND : 윈도우 핸들러 아마 인트일끼다 , UINT : 언사인드인트 ㅋㅋ, //WPARAM : W 워드, 아마 언사인드 인트일끼다 (16bit 당시에 워드가 2바이트 였음요), LPARAM : long 롱 (4바이트) HINSTANCE g_hInst; //HINSTANCE : 요것도 찾아보면 아마 정수형일 것임 //g_hInst : 글로벌 전역변수란 의미 글로벌 핸들러 인스턴스 LPSTR lpszClass = L"First"; //LPSTR : 문자형 포인터 즉 케릭터포인터 ㅋㅋ //lpszClass : 롱포인터스트링제로, 널로 끝나는 문자형 포인터. 그러니깐 따옴표 나오잖아 ㅋ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) { // WinMain : 요게 엔트리 포인트이다 일반C로 컴파일 안됨 // APIENTRY : 요게 엔트리포인트다 라는 의미 컴파일 할땐 없어진다. STD콜인지 CDECL콜인지 // 두번째 인자 안쓴다... 옛날에 남아 있던거라 // lpszCmdParam : 프로그램 인자들 받아들일 수 있게 하는 아이 // nCmdShow : 창을 화면에 보여 줄껀가 안보여 줄껀가 결정 HWND hWnd; MSG Message; WNDCLASS WndClass; // WNDCLASS : 이 야이 구조체다 찾아보면 스트럭트 되있다능 아주 중요한 구조체 g_hInst = hInstance; // 전역변수에 윈메인 첫번째 인자 집어넣고 있다. 다른함수들이 접근 가능하도록 인자를 보여주는것 //다음 구조체에 값 집어 넣기 초기화 시켜주기 WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // 창의 전체 색 WHITE_BRUSH 흰색으로 새팅 WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); // 마우스 커서 IDC_ARROW 화살 WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); // 프로그램 실행시키면 창 젤 왼쪽 위에 아이콘 모양 IDI_APPLICATION 어플리케이션 모양 WndClass.hInstance = hInstance; //구조체 안에 첫번째 인자를 넣어줘야 해서 넣어줌 WndClass.lpfnWndProc = (WNDPROC)WndProc; //lpfnWndProc 롱포인터 펑션 함수 주소 넣는자리. 메세지를 받을 함수 이름을 넣어줘야함 //젤 중요한 게념임 (예화 이야기 해주신게 그림판 뛰우고 창 이동 할때 마우스 포인터가 창 인식) //창이 주인공이 아님 창위에 뭐가 있는거임 그아이가 운영체제인거임 //실행중인 한덩어리를 클레스라고 부른다 //모날리스? (창안에 창 뛰웠을때 쫄따구창이 뒤에 큰창이 클릭 되는아이 안되는 아이 구분 하기 위한거) WndClass.lpszClassName = lpszClass; WndClass.lpszMenuName = NULL; //메뉴 WndClass.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&WndClass); //이 모양대로(구조체에 넣어놓은 값을) 창을 만들꺼다 라고 윈도우한테 "자 이대로 등록해" 라고 알려주는 함수 //예화) 구조체에 값 넣는것이 신청서에 작성하는거라 생각하면 쉽다. 요담에 이 구조체는 안쓴다.유유 hWnd = CreateWindow(lpszClass, lpszClass, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, (HMENU)NULL, hInstance, NULL); // CW_USEDEFAULT 이거 앞에 2개 창의 시작 좌표, 뒤에 2개 가로크기 새로크기 요렇게 4각형 그릴러면 4개가 필요하다 // 윈도우에서 원 그릴때 4개가 필요하다함. 반지름 값으로 하는게 아니라 타원 그리기 쉽게 할라꼬 ShowWindow(hWnd, nCmdShow); //화면에 보일 껀지 안보일 껀지 쎄팅해주는 함수 //창이 화면에 나타날지 안나타날지 두번째 인자가 결정 안에 값을 false 라고 넣으면 안보임 윈도우 4번째 인자가 결정 while(GetMessage(&Message, 0, 0, 0)) //GetMessage 윈도우가 돌고 있는걸 받는 함수 초고속으로 윈도우가 메세지를 보내고 있음 {//&Message 전달된 메세지 뇝두는 곳 TranslateMessage(&Message); // 키보드 입력 담당, DispatchMessage(&Message); // 윈도우가 처리할게 없는거 쓰래기 정보를 여기 넘김 } // 겟메세지 창 닫으면 0을 리턴함 와일문 빠져 나옴 // 큐(원형연결리스트)에서 제일 오래된 메세지를 들고 옴 // 원형큐 메세지큐 모양은 원형을 가지고 있다. 큐라는 개념은 first in first out FIFO 구조 return Message.wParam; // 정상 종료인지 비정상 종료인지 판별 } LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) {//요게 실제 매인이다 일을 뭐할지를 여기서 결정함 //UINT iMessag : 여기 이벤트 정보 번호가 온다 switch(iMessage) { case WM_DESTROY: PostQuitMessage(0); return 0; //WM_DESTROY 창을 닫으라는 메세지. 디파인 값이다. 창 닫는 시간 벌기 위해서 메세지 값 전달함 } return (DefWindowProc(hWnd, iMessage, wParam, lParam)); } | cs |
위 소스 코드는 앞으로 쓸 기본형이기 때문에 오늘 첫시간에만 타이핑 해보고 다음 시간들 부터는 복사해서 사용하자라고 하심
비쥬얼 스튜디오에서 소스코드 붙어넣기해서 창 뜨는거 실습해보려 했으나 포멧후 다시깐 비쥬얼 스트디오가 프로젝트 생성 OK 버튼 자체가 비활성화 되있는
안습적인 오류로 인해 실습해보지 못하였다.
728x90
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151112_임현수_업무일지_WIN32API#1 (6) | 2015.11.13 |
---|---|
2015.11.12_개인업무일지_[Win32API #1]_이량경 (5) | 2015.11.13 |
20151112_안향진_API_01 (5) | 2015.11.13 |
20151112-김재홍-win32API_1일차-첫번째예제 (3) | 2015.11.13 |
20151112_박서연_WinAPI_1 (4) | 2015.11.12 |
20151112 API 수업 / 11번 남수진 (6) | 2015.11.12 |
20151112 -여지윤- 업무일지 - 라즈베리파이,Win32 API (7) | 2015.11.12 |
20151111 엄민웅 업무일지 영상처리 축소 (13) | 2015.11.11 |