Day-17 MFC 이야기와 실습2 카드 짝 맞추기 게임을 MFC를 이용해 만들어보자. 우선 이미지 파일을 C드라이브 및 temp 폴더에 넣어주자. 카드는 총 19장을 사용한다. 0~18번까지 19개의 숫자를 사용하고 0번은 뒷면이고 1~18번은 그림 이미지를 사용할 것이다. 또한 1~18번을 각 두장씩 뿌려서 같은 번호가 두 개씩 나오도록 해야한다. 카드를 섞을 때는 1~17번 까지 두번을 순서대로 뿌린 후 random하게 2개를 뽑아 자리를 바꾸는 행위를 반복해서 카드를 섞는다. 두 개의 같은 번호(같은 이미지) WM_TIMER 메세지 우리가 보통 행위를 해야지 메세지를 받을 수 있는데 일정 시간마다 메시지를 받을 수 있도록 하는것이 TIMER이다. 일정 시간마다 WM_TIMER 메세지를 받는다. WM_TIMER가 싫다면 CALLBAC.. Programming/TIPS 17기 2017. 8. 29. 17:20
Day-15 Win32 API 이야기와 실습2 GDI(Graphics Device Interface) Windows 운영체제가 그래픽 장치에 대해 프로그램 소스 코드가 독립성을 유지할 수 있도록 그래픽 장치를 하나의 모델로 추상화 했다. 그리고 이 장치를 사용해서 그림을 그리거나 여러가지 속성을 표현하는 작업에 대해 다양한 API 함수를 제공해서 프로그래머가 윈도우에 쉽게 그림을 그릴 수 있도록 했다. 따라서 Windows 운영체제가 그래픽 장치에 대해 프로그램이 독립성을 유지할 수 있도록 만든 기술이다. GDI Object Windows 운영체제는 그래픽 장치를 추상화 시키기 위해서 그리기에 필요한 요소들을 여러 개의 객체로 구성하고 장치에 종속적인 내용(장치에 따라 수정되어야 하는 내용)들을 해당 객체에 숨겼는데 그 객체를 GDI Object라고.. Programming/TIPS 17기 2017. 8. 17. 15:23
Day-14 Win32 API 이야가와 실습1 핸들(Handle) 핸들을 알기 전에 운영체제와 리소스에 대해 알아둘 필요가 있다. 운영체제(Operating System)는 컴퓨터를 구성하는 여러 가지 장치를 관리해준다. 따라서 응용 프로그램 개발자는 컴퓨터라는 복잡한 시스템을 직접적으로 제어하지 않아도 된다. 리소스(Resource)는 운영체제에 의해서 관리되는 장치나 해당 장치를 사용하기 위해 필요한 정보들을 말한다. 또한 리스소는 대부분 메모리로 구성되어 있어 주소를 가지고 있다. 따라서 푸인터를 사용하여 주소에 접근 할 수 있다. 하지만 직접적으로 포인터를 사용해 주소에 접근하면 안정성에 문제가 생긴다. 즉, 누군가가 주소를 통해 운영체제의 중요 정보를 빼앗기거나 동작이 불가능한 상태가 될 수도 있다. 핸들은 윈도우 프로그램에서 대부분 사용된.. Programming/TIPS 17기 2017. 8. 15. 14:11
Day-12 C++ 이야기2 class C++ 언어에서 객체를 class라는 문법으로 다루고 있다. C++언어의 struct는 c언어의 struct와 다르다. 오히려 C++언어의 class가 C언어의 struct와 유사하다. C언어로 '이름', '나이', '몸무게'를 입력 받아 저장하는 프로그램을 만들어보자. 이 데이터는 한 사람에 대한 정보이기 때문에 그룹지어서 관리해야하고 세 데이터 타입이 모두 달라서 구조체를 사용해 정의해야 한다. struct Peopel { char name[10]; short age; double weight; }; 위와 같이 우선 구조체를 정의하고 구현해야하고 나열식으로 적는다. 하지만 이렇게 적으면 추후 변화에 대해 유지 보수가 힘들어진다. 초보 프로그래머는 아래와 같이 프로그램을 구현한다. void .. Programming/TIPS 17기 2017. 8. 11. 12:17
Day-11 함수 포인터, C++의 철학과 C++ 이야기1 배열을 포인터 형으로 바꾸기 int data[3]; data[2] = 2; *(data + 3) = 2; int data[2][3]; data[1][2] = 3; data[1]을 A로 치환한다. A[2] = 3; *(A + 2) = 3; *(data[1] + 2) = 3; *(*(data + 1) + 2) = 3; 함수 포인터 함수의 포인터는 기계어 명령문을 가리킬 수 있는 포인터이다. 함수의 ip를 기억했다가 사용한다. 일반적인 포인터는 데이터 포인터를 말한다. 즉, 행위는 그대로이지만 매개변수의 조건을 바꾸어줄 수 있다. 특정 함수를 구성하는 시작 명령의 위치를 가리키는 포인터이다. 함수의 포인터를 이용하여 주로 함수를 호출하여 실행한다. int Sum(int a, int b) { int res = .. Programming/TIPS 17기 2017. 8. 1. 11:47
Day-10 다차원 포인터, 구조체와 연결리스트 다차원 포인터의 실수1 매개변수에 포인터 변수를 잘못 사용한 경우 함수의 매개 변수로 포인터를 사용할 때 차원 개념을 잘못 적용하면 원하는 값을 반환 받지 못하는 오류가 발생할 수 있다. 문제가 발생하는 이유 동적으로 할당된 주소 값을 포인터 변수에 대입하면 문제 해결? 함수의 매개변수로 2차원 포인터 사용하기 다차원 포인터의 실수2 다차원 포인터의 실수3 short **pp; // 2차원 포인터 pp // short **를 의미한다. (2차원) *pp // short *를 의미한다. (1차원) **pp // short 를 의미한다. (0차원) &pp // (3차원) 변수를 선언하고 해당 변수에 * 연산자를 사용하면 자신의 차원은 1씩 줄어들고 &를 사용하면 자신의 차원이 1씩 증가한다. int a_lo.. Programming/TIPS 17기 2017. 7. 30. 23:10
Day-9 메모리 할당, 다차원 포인터 프로그램과 프로세스 프로그램(Program) : 프로그래머가 만든 프로그램 실행 파일이다. 프로세스(Process) : - CPU가 실행 파일에 있는 명령들을 실행할 수 있도록 운영체제가 실행 파일의 명령들을 읽어서 메모리에 재구성 한것이다. - '실행 중인 프로그램'이라고도 한다. - 세그먼트의 집합으로 구성되어 있다. 세그먼트 : - 여러 가지 정보나 사용자가 입력한 데이터를 기억하는 메모리 공간이다. - 코드 세그먼트, 데이터 세그먼트, 스택 세그먼트로 이루어져 있다. 힙 세그먼트는 낮은 주소에 높은주소로 메모리가 할당 된다. 또한 크기가 고정되어 있지 않고 유동적이다. 스택 세그먼트는 높은 주소에서 낮은주소로 메모리가 할당 된다. 크기가 고정적이다. 메모리 할당 데이터를 저장할 공간을 적정하게 나.. Programming/TIPS 17기 2017. 7. 28. 11:52
Day-8 표준 입력 함수, 배열과 포인터 매크로 함수 속도는 향상되지만 실행 파일의 크기가 늘어나는 특징을 가진다. 문자열을 입력 받는 gets 함수 gets는 get string의 줄임 표현이다. 문자열을 입력 받는 표준 입력 함수이다. Enter키를 입력할 때까지 입력한 모든 문자를 하나의 문자열로 본다. gets 함수는 입력 버퍼에 Enter 키가 남지 않는다. gets 함수로 입력 받은 문자열에는 Enter키를 입력한 위치에 NULL 문자 0이 추가된다. char input_string[10]; gets(input_string); gets 함수에서 사용자 키 입력 취소하기 표준 입력을 받는 중에 Ctrl + C 키를 입력하면 표준 입력이 취소되고 프로그램이 중지한다. 사용자가 정상적으로 입력을 완료하지 않은 상황에 대처할 수 있도록 코드.. Programming/TIPS 17기 2017. 7. 22. 15:26
Day-7 포인터, 표준 입력 함수 'ptr = ' 과 '*ptr = '의 차이점 'ptr = ' : 일반 변수로 사용된다. 포인터 변수의 값(가리키는 대상의 주소)이 변경된다. '*ptr = ' : 자신이 가지고 있는 값을 주소로 인식한다. 포인터가 가리키는 대상의 값이 변경된다. 'ptr = ' 형태는 포인터 변수에 주소를 저장한다. 포인터 변수에 저장된 주소는 '포인터가 가리키는 대상 메모리'의 시작 주소를 의미한다. 포인터에 &를 사용하지 않고 직접 주소를 지정해도 된다. short *ptr; ptr = (short *)0x0000006C // 0X0000006C는 int형 데이터이다. 따라서 (short *)로 캐스팅 해주어야 한다. '*ptr = ' 형태는 포인터가 가리키는 대상에 값을 저장한다. '포인터가 가리키는 대상'의 값.. Programming/TIPS 17기 2017. 7. 20. 13:22
Day-6 배열과 문자열, 포인터 몫과 나머지의 사용 나눗셈 => 몫(/) 나머지(%) char data[3]; index(색인)은 0,1,2이다. 색인이 0, 1, 2 이외의 수가 들어가면 오류가 발생 할 수 있다. 따라서 색인의 범위를 제한할 필요가 생긴다. if(key>=0&&key Programming/TIPS 17기 2017. 7. 16. 15:32