GSI

Google
 

테스트를 위해서 프로젝트를 생성한다.
응용 프로그램 종류를 단일 문서로 설정하고 기본 클래스는 CView로 설정합니다.
사용자 삽입 이미지

기본 프로젝트는 아래와 같습니다.
사용자 삽입 이미지

위의 응용 프로그램에 새로운 CView를 추가해 보겠습니다.
CDialog, CStatic 등의 컨트롤은 Create() 등의 함수를 통해서 생성하고 처리를 하게 되는데요.
CView는 Create()로 하게 되면 삭제 하는데 오류가 생기거나 안되더라구요.
그래서 CView는 아래의 코드와 같이 CCreateContext를 사용해서 처리 합니다.

CWnd* pFrameWnd = this;
CCreateContext pContext;
pContext.m_pCurrentDoc = new CDummyDoc();
pContext.m_pNewViewClass = RUNTIME_CLASS(CPixelMapView);
m_pPixelMapView = (CPixelMapView *) ((CFrameWnd*)pFrameWnd)->CreateView(&pContext);
ASSERT(m_pPixelMapView);
m_pPixelMapView->ShowWindow(SW_NORMAL);
m_pPixelMapView->MoveWindow( 20, 20, 100, 100 );

1. CDummyDoc 클래스를 생성합니다.
2. CPixelMapView 클래스를 생성합니다.
3. CInsertViewView 부모 클래스에 헤더를 선언합니다.
   - #include "DummyDoc.h"
   - #include "PixelMapView.h"
4. 클래스 내부에 View 접근을 위한 포인터 변수를 선언합니다.
   - CPixelMapView* m_pPixelMapView;
5. CPixelMapView 를 등록하기 위해서 OnCreate()를 선언합니다.

int CInsertViewView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CView::OnCreate(lpCreateStruct) == -1)
  return -1;

 CWnd* pFrameWnd = this;
 CCreateContext pContext;
 pContext.m_pCurrentDoc = new CDummyDoc();
 pContext.m_pNewViewClass = RUNTIME_CLASS(CPixelMapView);
 m_pPixelMapView = (CPixelMapView *) ((CFrameWnd*)pFrameWnd)->CreateView(&pContext);
 ASSERT(m_pPixelMapView);
 m_pPixelMapView->ShowWindow(SW_NORMAL);
 m_pPixelMapView->MoveWindow( 20, 20, 100, 100 );

 return 0;
}

추가를 하고 나면 아래와 같이 화면이 나오게 됩니다.
사용자 삽입 이미지

이후 작업은 입맛에 맞게 ^^
Posted by gsi
: