전체 글
-
WM_PAINTWin API/4. GDI 2021. 4. 1. 18:53
WM_PAINT 메시지를 이용해서 직사각형을 그려보자. 직사각형을 그릴 때는 Rectangle 함수를 이용해서 그리면 된다. 운영체제는 개별 윈도우의 화면을 보관해 주지는 않지만, 대신 윈도우의 일부가 지워졌다는 사실을 프로그램으로 즉각 알리며, 그 방법은 WM_PAINT 메시지를 보내주는 것이다. WM_PAINT메시지는 "너의 작업영역이 일부 지워졌으니까 빨리 다시 그려라" 라는 의미이다. 프로그램을 실행하고 드래그로 윈도우 창을 늘렸을 때, 크기가 변경하는데 크기가 변경됨에 따라서 다시 그려줘야 한다. 그럴 경우 WM_PAINT메시지가 발생한다. 화면으로 출력을 하기 위해서는 반드시 DC가 있어야 하며, DC를 얻는 방법에는 BeginPaint함수를 통해 얻을 수 있다. DC는 주로 하나의 윈도우와 ..
-
컨트롤의 활용 - 1인 채팅방 만들기 ( 엔터 키, 탭 키, 스크롤 기능 )Win API/3. Control 2021. 4. 1. 10:56
개발 환경은 Visual Studio 2008 이번 글에서 만들어볼 내용은 컨트롤의 기본적인 내용을 가지고 1인 채팅방을 만들어 볼 것이다. 아래는 이 프로그램의 완성된 내용의 결과 화면이다. 1. 기본 기능 만들기 소스 파일 위의 프로그램을 실행시키고, 글을 계속 입력하다보면 불편한 점이 나타난다. 스크롤에 관련한 것인데, 아래의 그림을 보자. 2. 스크롤 기능 만들기 위의 창을 보면 채팅창의 화면( 리스트 박스 )에서 입력한 글의 수가 채팅창 화면의 크기를 넘어서면, 스크롤의 기능이 활성화 되면 좋겠다. 위의 채팅창의 화면에서 18줄을 넘어서면, 스크롤의 기능이 활성화 되야 한다. 스크롤 기능을 만들기 위해서는 아래의 SetScrollPos 함수를 이용해야 한다. 아래 [그림 1]에서는 스크롤 바에서..
-
리스트 박스Win API/3. Control 2021. 3. 31. 23:05
개발 환경은 Visual Studio 2008 아래와 같이 여러 줄에 걸쳐 나열된 것을 리스트 박스라고 한다. 이 리스트 박스를 이용하여, 선택된 리스트의 이름을 위의 윈도우 캡션에 저장하는 프로그램을 만들어 보자. 리스트 박스를 생성할 시에, LBS_NOTIFY 가 있어야 한다. 그 이유는 사용자가 목록 중 하나를 선택하였을 때, 부모 윈도우로 통지 메시지를 보내도록 하는 기능이 있어야 하기 때문이다. LBN_SELCHANGE는 사용자에 의해 선택이 변경되었을 때를 의미한다. 프로그램 실행결과 소스 파일
-
에디트 박스Win API/3. Control 2021. 3. 31. 23:04
개발 환경은 Visual Studio 2008 아래의 그림의 입력 칸을 에디트 박스라고 한다. 32KB로 제한되며, 그 이상이 되면 Edit control out of space 에러가 발생한다. 이 에디트 박스에 글이 입력되면, 위의 윈도우 창의 캡션에 입력된 내용을 저장하도록 하는 프로그램을 만들어 보자. 이 내용을 시작하기에 앞서, GetWindowText 함수와 SetWindowText 함수에 대해 살펴볼 필요가 있다. 윈도우 창을 띄우는 기본 소스 파일을 가지고 구현을 하도록 한다. WM_CREATE에서 에디트 박스를 생성한다. 에디트 박스에 글이 입력이 되면, 글의 내용을 캡션에 저장한다. EN_CHANGE는 문자열이 변경되었을 때를 의미한다. 프로그램 실행결과 소스 파일
-
체크 박스Win API/3. Control 2021. 3. 31. 11:20
아래의 글에서, 윈도우 창을 띄우는 소스를 가지고 와서 구현할 것이다. 작업 환경은 Visual Studio 2008 designatedroom87.tistory.com/122?category=892369 프로젝트 생성 및 윈도우 창 띄우기 Visual Studio 2019를 실행시킨다. 그리고 새 프로젝트 만들기를 선택한다. Windows 데스크톱 마법사를 선택한다. 적당한 프로젝트 이름을 정하고 만들기를 선택한다. 애플리케이션 종류는 데스크톱 애 designatedroom87.tistory.com 아래의 UI 모양이 여기에서 만들 내용이다. 다음과 같이 열거자를 정의하고, 전역 변수를 선언한다. 전역 변수가 필요한 이유는 체크 박스의 상태가 체크가 되어 있지 않은 상태에서 선택이 되면 체크 상태로 만..
-
0. 구현 영상API 프로젝트/디아블로2 2021. 3. 29. 22:10
기본적으로 디아블로2에서는 A* 알고리즘이 필요하다. designatedroom87.tistory.com/379?category=885556 A* 알고리즘 내용은 책 1권, 5권, 7권에서 발췌. A* 알고리즘의 역사는 너비 우선 탐색에서 시작한다. 너비 우선 탐색은 트리에서 한 노드의 모든 자식 노드를 점검한 후에 트리의 다음 수준으로 내력가는 방식 designatedroom87.tistory.com 1. 사용언어: C/C++(Win API) 2. 사용 툴 : Visual Studio 2008 3. 세부사항 3- (1). UI구성 : 게임 시작 화면, 인 게임 화면, 맵 에디터 화면으로 구성 3- (2). 자료구조 : 우선순위 큐, 스택, 연결리스트, FSM, Hash Table(크래프팅 시스템에 활용..
-
버튼Win API/3. Control 2021. 3. 29. 10:45
개발 환경 : Visual Studio 2008 버튼을 하나 생성해서, 버튼이 클릭 되면 "클릭되었다"라는 메시지를 출력하는 프로그램을 만들어 보자. 버튼도 하나의 윈도우이다. 다만, 자식 윈도우이다. 그러므로 버튼의 생성은 CreateWindow함수를 이용한다. 버튼이나, Text, 에디트 박스, 리스트 박스, 콤보박스 들은 전부 자식 윈도우 이다. 즉, 컨트롤은 윈도우이기는 하지만 홀로 사용될 수 없으며, 부모 윈도우의 차일드로 존재해야 한다. 차일드 컨트롤은 보통 부모 윈도우가 만들어 질때, 즉, WM_CREATE메시지가 발생했을 때 만든다. 버튼을 생성한 후에 CreateWindow함수는 생성된 차일드 컨트롤의 윈도우 핸들을 리턴하는데, 핸들이 필요한 경우 별도의 변수에 핸들값을 저장해 두면 된다..