'PROGRAMMING/MFC(C++)'에 해당되는 글 33건

  1. 2011.03.31 [0331수업] MFC 클래스의 기능
  2. 2011.03.31 [0331수업] MFC Basic Code
  3. 2011.03.31 [0331수업] MFC 개관

프로젝트 생성시 옵션설정에 따라,

공통적으로 존재하는 3개의 클래스.

1. App

2. MainFrame

3. View

 

C#(WinForm)

C(WinAPI)

C++(MFC)

어떤것으로 짜든, windows api를 사용하게 됨

이것이 하드웨어로 연결

 

CAPP: 전역데이터 함수 관리. 화면 출력과는 크게 관계 없음.

CView: 윈도우의 view영역 관리.

CMainFrame: 그 외 나머지.(예를 들어 상태 표시줄 관리는 이 클래스에서 가능)

 

CAPP → CMainFrame → Cview 순으로 실행되고, 실제 가장 많이 사용되는 것은 CView이다.

 

두 개의 클래스를 동시에 상속받고자 할 때

1. C#에서 지원하지 않는 다중상속을 지원한다.

2. 하나씩 상속받은 두 개의 클래스를 생성하고, 또 다른 클래스를 만들어 하나는 상속, 하나는 호출하여 사용한다.

 

■ MFC의 기본클래스 4개

보이는 클래스-CView, CDocument

보이지 않는 클래스-CAPP, CMainFrame

 

■ 메시지펌핑

메시지 펌핑(MFC)-스레드를 돌려 계속 돌게하고 데이터가 있을때마다 가져오게 하는 것

(WinAPI에서는 메시지 루프와 같은 기능)

 

■ MFC에서의 메시지 처리 루틴(다음시간)

 

ex)

BITMAP파일(정보구조체와 값구조체로 구성)

비트맵파일을 불러오는 함수는 어느 클래스에?

View vs. Document(여러개의 그림파일을 동시에 불러올 수 있음)

 

■ 같은 기능이라도 어떤 프로그램이냐에 따라 구현되어야 하는 클래스가 다르다.

프로그램의 흐름(flow)에 따라 이벤트 발생지점을 파악하여 적절한 클래스에 함수를 구현해 주어야 한다.

 


Posted by 마마필로 :

■ 클래스 소속밝히기

소속된 클래스 이름::함수 이름

Cmfc0331View::Cmfc0331View()

 

■ CObject

:MFC의 최상위 클래스

닷넷에서 최상위 클래스인 Object클래스의 역할과 거의 비슷(닷넷의 오브젝트 클래스-기본 자료형을 가지고 있음)

따라서, CObject클래스에서 파생된 클래스는 모든 데이터 타입을 사용할 수 있다.

 

MFC를 자세히 공부하기 위해서 CObject클래스 부터 파생된 클래스로 학습.

클래스의 내부요소를 자세히 설명해 놓은것이 msdn이다.

 

■ C++클래스에서 함수의 선언부와 구현부(C#과의 차이)

C#의 경우 클래스내에 필드블럭/메서드블럭으로 구분되었다.

메서드의 구현부에서 바로 구현하였을 뿐, 메서드의 선언부를 따로 두지 않았다.

 

그러나 C++은 함수가 구현되면 함수의 선언부가 반드시 코드 블럭내에 존재해야 한다.

미리 선언하지 않은 함수는 소속을 밝히더라도 멤버가 아니라는 에러가 발생한다.

해당 클래스에 미리 함수의 선언부를 작성해 주어야 한다.

선언부 없이 구현부만 존재할 경우 에러발생 하지만, 선언만 하고 구현하지 않는 것은 괜찮다.

변수를 선언하고 사용하지 않는 것과 같은 원리이다.

 

▷ 함수의 선언부=헤더파일=필드블럭(함수의 선언부는 C#에서의 필드블럭과 같다고 볼 수 있다)

▷ 함수의 구현부=소스파일(.cpp)에 존재=메서드블럭

 

▷ 이렇게 함수를 선언부와 구현부를 분리해서 작성하는 이유

1. 구현부를 보여 줄 필요가 없기 때문에.

헤더파일에서 선언부만 보아도 함수의 용도를 알 수 있기 때문에 구현부를 보여줄 필요가 없다.

그러나 C#은 선언부가 없기 때문에 구현되는 코드 전체를 보여주어야 한다.

2. 코드 길이가 너무 길어지는 것을 막기 위해.

 

■  전역함수 및 변수

어떤 클래스에도 소속되지 않은 함수 혹은 변수를 만들때

프로젝트 내의 어떤 부분에 두어도 상관 없다.

'클래스 뷰'의 '전역 함수 및 변수'에서 해당 함수 또는 변수를 더블클릭하면 그 위치를 찾을 수 있다.

 

전역함수의 경우 함수 원형을 선언하지 않아도 된다.

C의 표준라이브러리 함수 사용 가능.(함수 원형 선언 없이)

 

C++에서 전역함수나 변수는 C#에서의 의미와는 차이가 있다.

전역이라고 하더라도 어디서든 자유롭게 쓸 수 있는 것은 아니다.

같은 함수명(변수명)으로 선언된 전역함수(전역변수)라 할지라도 클래스 별로 그 의미는 다르다.(같은 것이라고 볼 수 없다)

선언된 클래스 내에서만 사용할 수 있다.


Posted by 마마필로 :

■ MFC(Microsoft Foundation Class)

: c와 c++로 만든 개체지향기반의 마이크로소프트웨어에서 만든 프레임웍

 

■ Document와 View

 

가장 큰 윈도우는 바탕화면(Window) → 표준윈도우(Window) → 대화상자(Dialog Box), 최소/최대화버튼이 없고, 대신 물음표가 있다) → Message Box → Control(확인버튼 같은 것)

 

□ Document:부모 윈도우의 클라리언트 영역. Document는 출력하지 않는다. 자식 윈도우의 출력사양을 결정해 준다

 

□ View:윈도우의 클라이언트 영역만을 의미(윈도우의 클라이언트 영역=MFC에서는 View). API로 보면 부모윈도우에 자식윈도우를 띄웠을 때, 클라이언트 영역만 있는 자식윈도우에 해당.

따라서, 자식윈도우를 하나 만드면 view가 1개, 자식윈도우를 두개 만드면 view가 2개

 

■ Application Frameworks

API는 정교한 조작(?)에 의해 개발해야 하기 때문에 생산 기간이 길다.

따라서 생명주기가 긴 장비 안에 들어가는 프로그램 개발에 주로 사용된다.(ATM, 자동차 내부 등)

 

지나치게 긴 개발 기간을 단축하기 위해 프레임웍을 생각.

프레임 웍 개발을 위해 AFX(Application Framework technology development group)를 만들고 AFX 1.0으로 개발.

이후 MFC라는 이름으로 개발됨.

MFC는 다운로드 할 필요없이(닷넷 프레임웍은 따로 설치가 필요) 윈도우즈 운영체제 내에 설치 되어 있으므로

윈도우즈 운영체제를 기반으로 한다면,  MFC로 개발한 모든 프로그램은 실행 가능하다.

 

C++로 만든이유

객체 지향 언어이기 때문에.

객체 지향 언어에서만 숨기는 것(변수, 함수 등)이 가능하다.

C++은 C를 포함한다.

 

Win API와 MFC를 이용하면 윈도우 기반 OS에서 구동되는 모든 프로그램은 개발 가능 해진다.

 

MFC는 새로운 버전이 이전 버전을 다 포함한다.

.net Framework의 경우 운영체제의 버전에 상관없이 프레임웍의 버전만 수정해서 운영체제의 버전에 맞는 프레임웍을 설치해야 한다.

새로운 프레임웍 버전에서는 이전의 함수를 수정해 버린다.

반면,  MFC는 이전 버전의 함수도 새 버전에 다 포함시켜 놓고, 운영체제의 버전을 체크하여 버전에 관계없이 실행할 수 있게 한다.

 

▶ MFC의 장점

윈도우 어플리케이션의 개발 기간 단축.

윈도우 기반 운영체제라면 별다른 설치 없이 이용 가능.

상위 버전이 이전 버전을 포함-버전 간 호환 가능.

 

■ MFC의 구성

1) 일반적인 용도를 위한 class

2) Exception-handling class: 예외 처리를 위한 함수 제공. 메모리/입출력 에러, OLE(Object Linking and Embeded)-프로그램 안에 다른 프로그램이 존재. 그런 프로그램의 데이타베이스에서 오는 에러 등의 처리를 위한 함수 제공.

3) Collection class

 

컬렉션을 사용하는 이유

소프트웨어에서 다루어야 하는 데이터의 양이 많아짐.

데이터의 크기가 커질때 문제점-원하는 데이터를 찾기가 어려워짐, 하나로 다룰 수 있는 데이타타입이 필요

이러한 문제점 해결을 위해 컬렉션 존재. 많은 양의 데이터를 다룰 수 있는 데이터타입을 만들 수 있음.

 

4) Dynamic string class

5) File class

6) Time class

7) 기타(CPoint, CSize, CRect 등)

Posted by 마마필로 :