MFC

DECLARE_DYNCREATE와 IMPLEMENT_DYNCREATE

디버그정 2008. 7. 30. 15:48

==============================================================

CSingleDocTemplate* pDocTemplate;

pDocTemplate = new CMultiDocTemplate(
  IDR_MAINFRAME,
  RUNTIME_CLASS(CMulti2SingleDoc),
  RUNTIME_CLASS(CMainFrame), // custom SDI main frame
  RUNTIME_CLASS(CMulti2SingleView));
 AddDocTemplate(pDocTemplate);

==============================================================

위와 같이 RUNTIME_CLASS 클래스라는 매크로를 이용하여 클래스 일름을 등록시켜 주면

이들 클래스가 도큐먼트, 프레임 윈도우, 뷰로 이루어지는 프로그램의 벼대를 구성하게된다.

위의 클래스들은 개인이 직접 만든 클래스가 아니라 MFC에서 상속을 받은 클래스입니다.

이렇게 클래스 이름만 가지고 런타임에 동적으로 인스턴스가 생성되도록 하려면 그 클래스에

복잡한기능을 구현해 넣어 주어야 한다. 이 기능이라는 것은 #define 문을 이용하여

IMPLEMENT_DYNCREATE라는 매크로에 의해 정의 되어 있기 때문에 소스 파일에 이 매크로

한 줄만 써 주면 동적 생성을 위한 복잠한 코드를 직접 자겅해 준 것과 같은 효고가 나타납니다.

이 소스 파일에 함수를 추가했으면 헤더 파일에 이를 선언해 주어야 하는데, 헤더 파일에는

DECLARE_DYNCREATE 매크로를 한 줄 써 주는 것으로 이것도 해결된다.

동적으로 생성되어야 하는 도큐먼트, 뷰, 자식 프레임 윈도우 클래스가 정의되어 있는 헤더

파일과 소스 파일을 각각 열어, 이들 클래스에도 모두 미 매크로가 들어 있음을 확인해 보기

바랍니다.


DECLARE_DYNAMIC와 IMPLEMENT_DYNAMIC

DECLARE_DYNAMIC, IMPLEMENT_DYNAMIC은

DECLARE_DYNCREATE, IMPLEMENT_DYNCREATE보다 약간 축소된 기능을 가지는

매크로입니다. 이 매크로를 사용하면 런타임에 그 클래스의 클래스 이름을 확인해

볼 수 있습니다.

'MFC' 카테고리의 다른 글

강력한 에디터 CRichEditView  (0) 2008.08.30
◎ MFC Class 레퍼런스(한글번역)  (0) 2008.08.30
지킴이 기초 강좌  (1) 2008.08.29
CCmdTarget Class MFC  (1) 2008.08.07
MFC 클래스의 최상위 클래스 CObject  (2) 2008.08.07
MFC 클래스 계층도  (1) 2008.08.07
DECLARE_DYNCREATE 매크로 풀어쓰기...  (2) 2008.07.30