프로그래밍/C++2015.06.18 14:51

윈도우 API - 윈도우 기반의 코드

application program interface


_twinMain -> dos의 메인 함수와 같다(진입점함수)

API는 C기반 코드이다.

stdafx.h 컴파일 시간을 최소화하기 위해서

pch파일 precompiledheader 최초 컴파일은 느리지만 그 이후는 속도가 개선된다.

이유 : pch파일 생성해서 복사만 함으로

WndClass 정의 -> Create Window -> Show Window 메시지루프를 돌린다 - 3개의 함수 호출


핸들 - 고유번호, 무언가를 대표하는 숫자(프로그램)

hInst는 한개 / hWnd는 여러개가 될 수 있다(윈도우를 대표하는 핸들)


_tchar - 2바이트(문자열)    앞에 TEXT(""); 프로젝트 속성에 따라서 바이트가 다르다

L"" 무조건 2바이트


MyRegisterClass(사용X)

InitInstance(실제 윈도우 Create)

-윈도우 생성

-윈도우 셋팅


전역변수 부분에 HWND g_hWnd 추가

InitInstance에 g_hWnd = hWnd; 추가


createwindow 함수 원형

CreateWindow(        ,제목,        ,시작위치X, 시작위치Y, 가로사이즈, 세로사이즈,)

usedefault는 해당 모니터의 해상도에 맞추어서 적절하게 2/3으로 한다.


WndProc (메시지 기반의 프로그램이다)라는 아이덴티티를 보여주는 함수

WPARAM : 어떤 키값을 가지고 있는가

About 도움말을 띄우기 위한 함수(필요 X)

GetMessage는 메세지 큐로부터 메시지를 가져온다. 메시지가 없을 경우 비활성화


Rectangle(HDC, nLeftRect, nTopRect, nRightRect, nBottomRect)

HDC 그리기를 대표하는 핸들

hWnd 현 윈도우 핸들

Ellipse(HDC, nLeftRect, nTopRect, nRightRect,nBottomRect);


윈도우 코딩시 개념

1. 좌표를 움직이고

2. 이전 그림을 지우고                Invalidate(HWND, 영역좌표(없으면 NULL), 지우고 싶으면 true 아니면 false)

3. 바뀐좌표에 다시 그림을 그린다.    


마우스 움직일시

case WM_MouseMove :

VK_LEFT 왼쪽키

VK_RIGHT 오른쪽키


신고

'프로그래밍 > C++' 카테고리의 다른 글

150618 수업일지  (0) 2015.06.18
Posted by JellyMarine
분류없음2015.06.16 15:06

리스트

각 데이터가 연관성이 있어야 자료구조이다.


마디 = 노드

Pointer는 다음데이터의 주소 혹은 전 데이터의 주소


single linked list - 뒤에 있는 데이터의 주소를 가짐

double linked list - 양방향 데이터 주소를 가짐 - STL에서 구현한다.

장점 : 추가 삭제가 빠르다.

추가했을 경우


삭제했을 경우


헤더파일 list

#include <list>

list<데이터 타입> 리스트명            리스트명[] : 대괄호 접근이 불가능하다

리스트 명.push_back(데이터);        데이터 추가

리스트 명.size();                    크기 리턴

.empty();                   비어있는지 확인

.clear();                    리스트 전체 삭제

.front();                    가장 앞노드

front(), back() 특정데이터를 뽑아내는 함수

.back();                    가장 뒷노드

.begin();                   가장 앞노드의 위치(iterater 타입)를 리턴한다.

   위치를 저장할 수 있는 변수 = iterator 타입

   STL 컨테이너가 가지고 있는 노드의 위치를 가진다.

   list 헤더(클래스)안에 iterator 클래스가 정의되어 있다.

   클래스안에 클래스가 정의(이너클래스) 

   사용법 : 클래스A :: 클래스 B

ex) list<int> :: iterator iter = IntList.begin();

*iter

iter의 위치에 있는 노드의 데이타

++iter

다음 노드의 위치이동

.end();                   가장 마지막 노드의 바로 다음 위치를 리턴한다.(해당 위치는 쓰레기 공간)

iterator타입은 크다 작다 비교가 안된다 따라서

같다 같지않다로 한다.

ex) for(iter = IntList.begin(); iter != IntList.end(); ++iter)

.push_front()            가장 앞에 추가

.erase(iterator 변수);     특정 위치에 있는 원소(=노드) 삭제, 리턴값을 가지고 있다.

리턴값은 지운 노드의 다음위치

따라서 증감사용에 유의 하여야한다

ex) iter = IntList.erase(iter);

else

++iter;

iterator 3대 오류메시지

increamentable - 증가X

decreamentable - 감소X

referencable - 참조X












신고
Posted by JellyMarine

unsigned int iSize = m_vecItem.size();

함수를 반복적으로 사용할 시 변수를 미리 만들어서 변수를 이용한다.


생성하기위한 기능을 따로 만든는 것 <- 디자인 패턴 중 하나

*((Cweapon*)m_vecItem([iInput - 1]))

push_back(0)            0

push_back(1)            0 삭제 0 1 생성

.

.

.

push_back(4)           0 1 2 3 삭제 0 1 2 3 4 빈공간   생성

push_back(5)           0 1 2 3 4 5 <- 빈공간에 5를 채워넣는다

(기존벡터의 갯수 /2)


벡터.reserve(공간의 갯수); 위의 경우 때문에 미리 공간을 선언한다.

벡터는 연속적이어야한다.   중간에 원소를 지우면 다시 메모리 재할당

벡터는 데이터의 사용이 빠르다.(데이터 중간에 삽입 삭제를 하는것은 권장되지 않는다)

주로 리소스 집어넣을 때 (ex. 이미지, 고정된 자원)

신고

'프로그래밍 > 수업일지' 카테고리의 다른 글

150615 수업일지  (0) 2015.06.15
150610 수업일지  (0) 2015.06.10
150609 수업  (0) 2015.06.09
150602 수업일지  (0) 2015.06.02
150601 수업  (0) 2015.06.01
0529 수업 - 상속  (0) 2015.05.29
Posted by JellyMarine