'mfc'에 해당되는 글 56건

  1. 2008/08/21 [MFC] 폴더만 탐색 및 xml 데이터 생성
  2. 2008/08/20 [MFC] XML의 계층구조 데이터를 읽어 들이는 코드 (GetchildNodes, getAttribute, nextNode)
  3. 2008/07/17 [MFC] Ruler 소스.. 메모리 DC 사용한 자연스러운 효과구현..
  4. 2008/07/17 [MFC] 스냅, 도킹 관련 구현 샘플..
  5. 2008/07/06 [MFC] Polyline 형태 라인에 옵셋 포인터 찍기.
  6. 2008/06/25 [MFC, DLL] Image를 그레이 스케일 버퍼로 생성후 그려주는 다이얼로그 소스
  7. 2008/06/23 [MFC, DLL] Image를 표시해 주는 다이얼로그 소스
  8. 2008/05/20 [MFC] MemDC 코드, 펌자료입니다. ^^
  9. 2008/05/20 [MFC] GDI+ 초기 설정 코드
  10. 2008/05/20 [MFC Copy Code] 마우스 이벤트, 드래그시 화면 객체를 상태 좌표로 이동시키기
  11. 2008/04/01 [MFC] CView 에 CStatic를 자식으로 추가해서 처리할때 Flicker 현상.. 이렇게 막아야 하나. (1)
  12. 2008/03/27 [MFC TOOLS] CScrollView 마우스 픽킹 처리 하기
  13. 2008/03/27 [MFC TOOLS] CView 컨트롤 삽입하기
  14. 2008/03/26 [MFC] CScrollView 에 CView 를 추가 하면 어떻게 될까요? (2)
  15. 2008/03/19 [C++] 응용 프로그램 실행 시키기 ( CreateProcess )
2008/08/21 02:55

[MFC] 폴더만 탐색 및 xml 데이터 생성

특정 폴더를 기준으로 하위 폴더를 찾아 내는 코드 입니다.
그리고 그 폴더 내용을 xml 형태로 만들어 주는 코드도 포함되어 있습니다.
xml 데이터로 만들어진 내용은 CEdit 컨트롤에 표시되며, 그 내용을
저장할 수 있습니다.


하위 폴더를 검색하는 코드 표시하기

폴더탐색 및 트리노드 추가 표시하기

트리 노드 전체 탐색 표시하기

트리노드탐색 및 xml 생성 표시하기

CEdit 내용을 파일에 기록 표시하기

관련 소스 :



.

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/08/20 22:40

[MFC] XML의 계층구조 데이터를 읽어 들이는 코드 (GetchildNodes, getAttribute, nextNode)

MFC에서 xml 데이터를 읽어 들이는 예제입니다.
아래의 내용을 계층구조를 통해서 읽어 들이게 됩니다.
자세한 소스는 소스 코드를 참조 하세요.
  - XmlParser.h, cpp

[xml 샘플]

<?xml version="1.0" encoding="EUC-KR"?>

<PATHS>
 <PATH NAME="Install Files">
  <PATH NAME="Dev">
  </PATH>
  <PATH NAME="Dev2">
  </PATH>
  <PATH NAME="Dev3">
   <PATH NAME="Dev3_a">
   </PATH>
   <PATH NAME="Dev3_b">
    <PATH NAME="Dev3_b_a">
    </PATH>
    <PATH NAME="Dev3_b_b"/>
   </PATH>
  </PATH>
 </PATH>
 <PATH NAME="temp">
  <PATH NAME="temp_a"/>
  <PATH NAME="temp_b">
   <PATH NAME="temp_b_a">
   </PATH>
   <PATH NAME="temp_b_b">
    <PATH NAME="temp_b_c"/>
   </PATH>
  </PATH>
 </PATH>
</PATHS>

계층 구조를 읽어 들이는 코드 (재귀호출)

1. 초기화 및 도입부

 ///
 MSXML2::IXMLDOMNodePtr nodeList = m_pDoc->selectSingleNode( Token.c_str() );
 _bstr_t bsElements("PATHS");

 if ( nodeList )
  FindName( nodeList->GetchildNodes() );

 nodeList.Release();

2. 재귀호출 부분

int tabCount = 0;

HRESULT CXmlParser::FindName( MSXML2::IXMLDOMNodeListPtr& lparam )
{
 long elementCount = lparam->Getlength();
 for( int i = 0; i < elementCount; i++ )
 {
  MSXML2::IXMLDOMElementPtr Element = lparam->nextNode();
  if( Element == NULL )
   break;

  _bstr_t bsNodename = Element->GetnodeName();
  _bstr_t bsElement("PATH");
  if( bsNodename == bsElement )
  {
   _bstr_t bsname("NAME");
   _variant_t varElementName = Element->getAttribute(bsname);

   // 해당하는 엘러먼트 Name의 이름 == 폴더 이름을 의미한다.
   CString strName;
   strName.Format( "%S", varElementName.bstrVal );    

   // 탭 카운터를 통한 출력
   CString strTabMergy;
   for( int tc = 0; tc < tabCount; tc++ )
   {
    strTabMergy += "\t";
   }
   strTabMergy += strName;
   TRACE( "%s\n", (LPSTR)(LPCSTR)strTabMergy);

   MSXML2::IXMLDOMNodeListPtr childElementlist = Element->GetchildNodes();
   if( childElementlist )
   {
    tabCount++;
    FindName( childElementlist );
   }
  }

  Element.Release();
 }

 tabCount--;
 lparam.Release();

 return S_OK;
}

아래의 콘솔 화면 내용입니다.

사용자 삽입 이미지


소스 코드 :


.

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/07/17 17:35

[MFC] Ruler 소스.. 메모리 DC 사용한 자연스러운 효과구현..

사용자 삽입 이미지

메모리 DC를 활용한 스크롤바의 Ruler 샘플입니다.
기존의 다른 다이얼로그에 포함시켜서 한 것보다 더 자연스럽네요.
그리고 스크롤 이동시에 잔상이 남지 않아서 더 좋은거 같습니다.

작업한 부분
1. 메모리 DC를 생성
2. 메모리 DC에 해당 Ruler의 크기 정보를 넣어서 미리 다 그려놓는다.
3. 스크롤 이동할때 마다 OnDraw()가 호출되고 그 내부에서 스크롤 포지션 값을 사용해서
    BitBlt 해서 처리 한다.
4. 잔상 효과는 OnHScroll(), OnVScroll()를 오버라이드 해서 Invalidate()를 해줘야 됩니다.

실행 파일 :


.
관련 파일 :


.
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/07/17 13:16

[MFC] 스냅, 도킹 관련 구현 샘플..

MFC의 UI를 배치 해보고, Winform의 UI배치를 보면 확연히 차이가 나는걸 확인할 수 있습니다.
그중에 가장 좋은건 아무래도 컨트롤 간의 도킹(?) 같은 기능이라고 보여 집니다.
아래의 이미지와 같이 컨트롤을 이동할때 마다 왼쪽, 오른쪽, 위, 아래, 그리고 중앙 에 대해서 실시간적으로 위치를 보정해 주는 기능이 정말 편하다고 생각 됩니다.
사용자 삽입 이미지

이번 툴의 샘플은 위와 같은 기능이 뷰에서도 많이 사용되게 되는데요.
가장 많이 사용되는 건 아무래도 스냅 기능이 아닐까 생각 됩니다.
해당 스냅의 간격에 맞춰서 객체를 이동시키는 방법 입니다.

스냅 구현
스냅을 구현할때 전 아래의 공식을 사용했습니다.

void CDataBox::MoveSnap( CPoint& pos )
{
 if( _bEnableSnap )
 {
  pos.x = pos.x - ( pos.x % _snapValue );
  pos.y = pos.y - ( pos.y % _snapValue );
 }
}
간단하게 설명을 하면 _snapValue가 스냅의 값이며, pos는 현재 위치를 담는 변수 입니다.
% 연산자를 사용해서 해당 스냅 간격에 대한 나머지를 구해서 현재 포지션에서 빼주는 방법으로 처리했습니다.

스냅을 처리하다 보면 현재 객체의 포지션값을 스냅으로 처리 하게 되면 제대로 동작하지 않습니다.
객체의 값은 항상 스냅이 적용되지 않은 값을 가지고 있어야 한다고 보여집니다.

화면에 보여질때 스냅의 처리를 통해서 보여지는게 조금더 유연하다고 생각 됩니다.

객체 도킹
객체의 도킹은 마우스로 이동할때마다 처리 해야 합니다.
다시 말해서 선택된 객체와 선택되지 않은 객체 간의 검사를 말합니다.
현재 객체의 위치와 다른 객체의 위치를 검사해서 도킹의 리미트 값의 범위 안에 들어왔을때
현재 객체를 대상 객체의 위치로 보정해 주는 방법 입니다.
여기에 더 해서 도킹이 이루어질 대상 객체와의 라인을 그려 주면 더 좋을듯 합니다.
사용자 삽입 이미지

위와 같이 해당 객체의 상태에서 파란선이 나오면서 객체가 같은 Y 축의 위치로 보정 됩니다.

이 소스는 조금 정리가 더 되어도 좋다고 생각 됩니다.
DataBox의 객체 관리 클래스에서 도킹을 담당하지만,
이것을 도킹 관련 클래스를 하나 두어서 작업 하는게 더 좋다고 보여 지네요..

관련 샘플 :


.

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/07/06 13:53

[MFC] Polyline 형태 라인에 옵셋 포인터 찍기.

x, y 의 포인터 배열을 폴리라인이 형성되어 있을때
그 라인에 대한 옵셋값을 사용해서 포인터를 찍는 샘플 코드 입니다.

사용자 삽입 이미지
















확대를 하면 아래와 같은 포인터가 생성되는걸 확인할 수 있습니다.
Left, Right 키를 통해서 옵셋 값을 늘리고 줄이고 할 수 있습니다.
사용자 삽입 이미지


실행 파일 :


.
관련 코드 :


.
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/06/25 02:29

[MFC, DLL] Image를 그레이 스케일 버퍼로 생성후 그려주는 다이얼로그 소스

사용자 삽입 이미지

그레이 스케일로 표현해주는 코드가 일부 들어가 있는 소스입니다.
MFC DLL 형태로 제작되어 있으며, 바로 이전의 게시물과 거의 동일한 구조입니다.
몇가지 단위 테스트를 위해서 제작된 샘플 프로젝트입니다.

관련 소스 :


.
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/06/23 18:36

[MFC, DLL] Image를 표시해 주는 다이얼로그 소스

사용자 삽입 이미지

MFC DLL : 한장의 이미지를 보여 주는 dll 파일입니다.
                현재 jpg의 파일만 인코딩이 가능합니다.
                (이 부분은 확장자를 사용해서 처리 하시면 됩니다. 아직 그건 추가 하지 않았네요. )

사용시에는 아래의 코드를 이용 하시면 됩니다.

 CDlgImage dlg( "E:\\Gsi_Project\\정상옥_프로젝트\\Project\\2008_06_23_LAM_ModuleTest\\bin\\blue.jpg" );
 dlg.DoModal();

이외의 생성자 인자로서는 해당 width, height를 입력해줄 수 있으며,
내부 코드에서는 해당 다이얼로그에 맞도록 리셈플링 처리가 되어 있습니다.


실행파일 :



.

프로젝트 파일 :


.

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/05/20 23:48

[MFC] MemDC 코드, 펌자료입니다. ^^

헤더 파일에 추가하세요.

#ifndef _MEMDC_H_
#define _MEMDC_H_

//////////////////////////////////////////////////
// CMemDC - memory DC
//
// Author: Keith Rule
// Email:  keithr@europa.com
// Copyright 1996-1999, Keith Rule
//
// You may freely use or modify this code provided this
// Copyright is included in all derived versions.
//
// History - 10/3/97 Fixed scrolling bug.
//                   Added print support. - KR
//
//           11/3/99 Fixed most common complaint. Added
//                   background color fill. - KR
//
//           11/3/99 Added support for mapping modes other than
//                   MM_TEXT as suggested by Lee Sang Hun. - KR
//
// This class implements a memory Device Context which allows
// flicker free drawing.

class CMemDC : public CDC {
protected:
 CBitmap  m_bitmap;       // Offscreen bitmap
 CBitmap* m_oldBitmap;    // bitmap originally found in CMemDC
 CDC*     m_pDC;          // Saves CDC passed in constructor
 CRect    m_rect;         // Rectangle of drawing area.
 BOOL     m_bMemDC;       // TRUE if CDC really is a Memory DC.

 void Construct(CDC* pDC)
 {
  ASSERT(pDC != NULL);

  // Some initialization
  m_pDC = pDC;
  m_oldBitmap = NULL;
  m_bMemDC = !pDC->IsPrinting();

  if (m_bMemDC) {
   // Create a Memory DC
   CreateCompatibleDC(pDC);
   pDC->LPtoDP(&m_rect);

   m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height());
   m_oldBitmap = SelectObject(&m_bitmap);

   SetMapMode(pDC->GetMapMode());
   pDC->DPtoLP(&m_rect);
   SetWindowOrg(m_rect.left, m_rect.top);
  } else {
   // Make a copy of the relevent parts of the current DC for printing
   m_bPrinting = pDC->m_bPrinting;
   m_hDC       = pDC->m_hDC;
   m_hAttribDC = pDC->m_hAttribDC;
  }

  // Fill background
  FillSolidRect(m_rect, pDC->GetBkColor());
 }

 // TRK begin
public:
 CMemDC(CDC* pDC                  ) : CDC() { pDC->GetClipBox(&m_rect); Construct(pDC); }
 CMemDC(CDC* pDC, const RECT& rect) : CDC() { m_rect = rect           ; Construct(pDC); }
 // TRK end

 virtual ~CMemDC()
 {       
  if (m_bMemDC) {
   // Copy the offscreen bitmap onto the screen.
   m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(),
    this, m_rect.left, m_rect.top, SRCCOPY);           

   //Swap back the original bitmap.
   SelectObject(m_oldBitmap);       
  } else {
   // All we need to do is replace the DC with an illegal value,
   // this keeps us from accidently deleting the handles associated with
   // the CDC that was passed to the constructor.           
   m_hDC = m_hAttribDC = NULL;
  }   
 }

 // Allow usage as a pointer   
 CMemDC* operator->()
 {
  return this;
 }   

 // Allow usage as a pointer   
 operator CMemDC*()
 {
  return this;
 }
};


#endif

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/05/20 23:46

[MFC] GDI+ 초기 설정 코드

헤더 선언 및 라이브러리 추가

#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib")

GDI+ 초기화
 // Initialize GDI+.
 GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

GDI+ 객체 삭제
 GdiplusShutdown(gdiplusToken);

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/05/20 23:44

[MFC Copy Code] 마우스 이벤트, 드래그시 화면 객체를 상태 좌표로 이동시키기

void CGDITestView::OnLButtonDown(UINT nFlags, CPoint point)
{
 SetCapture();

 m_oldPoint = point;

 CView::OnLButtonDown(nFlags, point);
}

void CGDITestView::OnLButtonUp(UINT nFlags, CPoint point)
{
 ReleaseCapture();

 CView::OnLButtonUp(nFlags, point);
}

void CGDITestView::OnMouseMove(UINT nFlags, CPoint point)
{
 if( GetCapture() == this )
 {
  m_realPos += (point - m_oldPoint);
  m_oldPoint = point;

  Invalidate();
 }

 CView::OnMouseMove(nFlags, point);
}

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/04/01 15:58

[MFC] CView 에 CStatic를 자식으로 추가해서 처리할때 Flicker 현상.. 이렇게 막아야 하나.

Google
 
CView를 사용해서 해당 뷰를 만들고 그 위에 CStatic를 생성해서 처리를 하고 있습니다.
CStatic에는 해당 컬러 정보를 사용해서 드로잉이 되며, 마우스로 이동, 크기변경 등의 이벤트가
발생하게 되는데요.

이때 드로잉 되는 순서가 CView가 먼저 드로잉 되고, CStatic가 드로잉 되게 되면서
강한 Flicker 현상(번쩍임)이 발생을 하네요..

이것저것 처리를 해봐도 언뜻 보면 드로잉 순서로 인해서 어쩔 수 없을거 같다는 생각이 드네요.

그래서 조금 우회를 시켜서 CStatic의 드로잉 부분을 CView에 직접 그리기로 했습니다.
CStatic는 보이지는 않지만 자기 기능을 대신 하고 있는거구요.

이렇게 하니 Flicker는 해결이 되었네요 ^^..

원래 이렇게 하는걸까요?.. 아님 다른 방법이 있는 걸까요?
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 1
2008/03/27 19:05

[MFC TOOLS] CScrollView 마우스 픽킹 처리 하기

Google
 


마우스를 통한 개발툴을 만들다 보면 대부분 스크롤 기능을 포함하는 경우가 많습니다.

CScrollView 화면을 통한 마우스 기반의 툴을 제작 하게 되면 불가피 하게 OnLButtonDown(), OnLButtonUp(), OnMouseMove()를 제어 하게 되어 있습니다.
여기서 부터 작업이 시작 되지요.
스크롤 뷰의 화면을 좀 크게 잡는다 싶으면, 스크롤 바를 움직여 보면 아시겠지만, 제대로 되지 않습니다. 16bit 형태의 값이였나, 아뭍턴 값의 한계로 인해서 스크롤 바의 위치가 제대로 처리 되지 않습니다.
그 경우 아래의 코드를 추가 해야 합니다.

BOOL CScrollTest2View::OnScroll(UINT nScrollCode, UINT nPos, BOOL bDoScroll)
{
// When you drag the scroll box, the nPos value send from WM_HSCROLL/WM_VSCROLL is 16bit value.
// Therefore retrieve the 32bit scroll box position value.
if(SB_THUMBTRACK == LOBYTE(nScrollCode)) // WM_HSCROLL
{
SCROLLINFO info;
if(GetScrollInfo(SB_HORZ, &info, SIF_TRACKPOS))
{
nPos = info.nTrackPos; // 32bit position value.
}
}
else if(SB_THUMBTRACK == HIBYTE(nScrollCode)) // WM_VSCROLL
{
SCROLLINFO info;
if(GetScrollInfo(SB_VERT, &info, SIF_TRACKPOS))
{
nPos = info.nTrackPos; // 32bit position value.
}
}

return CScrollView::OnScroll(nScrollCode, nPos, bDoScroll);
}

위의 코드를 추가 하고 나면 넓은 영역의 뷰도 스크롤이 제대로 표현되는 것을 확인하실 수 있을겁니다.

이제 확인해야 될 부분이 마우스 이벤트에 들어 오는 CPoint point 부분입니다.
스크롤 뷰에서 제일 맘에 안드는 부분이 이 부분인데요. point가 왜 스크롤 되고 나면 현재 위치를
구해 주지 않는지 모르겠습니다.
사용자 삽입 이미지
위의 화면에서와 같이 마우스 위치의 지점을 클릭해 보겠습니다. 클릭하고 나면 대략 값이 x:188, y:49 가 나오게 됩니다.
하지만 아래의 스크롤 바를 보면 우측으로 많이 가 있는 것을 볼 수 있습니다.
즉, 스크롤이 움직여도 마우스의 위치 값은 화면에 보이는 영역에 대한 상대 값임을 알 수 있습니다.

그렇다면 여기서 스크롤 되는 정보를 얻어 와서 처리 해주어야 한다는 사실을 알게 될겁니다.
스크롤 정보를 알기 위해서 GetScrollPosition() 를 사용합니다.

이제 스크롤 된 후의 현재 마우스 위치 정보를 아래와 같이 구합니다.
CPoint scrollpos = point + GetScrollPosition();

※예로 제가 작업했던 코드 일부 여기에 포스트...
void CScrollTest2View::OnMouseMove(UINT nFlags, CPoint point) { if( m_oldPoint == point ) return; CPoint scrollpos = GetScrollPosition(); TRACE2("현재 스크롤값:%d, %d\n", scrollpos.x, scrollpos.y); int x = scrollpos.x % GridSize.cx; int y = scrollpos.y % GridSize.cy; m_ptGrid = CPoint( ((int)((point.x+x) / GridSize.cx)) * GridSize.cx, ((int)((point.y+y) / GridSize.cy)) * GridSize.cy ); TRACE2("현재 그리드 위치:%d, %d\n", m_ptGrid.x, m_ptGrid.y); m_ptGrid.x -= x; m_ptGrid.y -= y; TRACE2("현재 그리드 위치:%d, %d\n", m_ptGrid.x, m_ptGrid.y); XORPen(); m_oldPoint = point; CScrollView::OnMouseMove(nFlags, point); } void CScrollTest2View::OnLButtonDown(UINT nFlags, CPoint point) { CPoint pos = CPoint(0, 0); GetCursorPos( &pos ); this->ScreenToClient( &pos ); CScrollView::OnLButtonDown(nFlags, point); } void CScrollTest2View::OnLButtonUp(UINT nFlags, CPoint point) { TRACE2("MousePos:%d, %d\n", point.x, point.y); CPoint scrollpos = point + GetScrollPosition(); TRACE2("ScrollPosition:%d, %d\n", scrollpos.x, scrollpos.y); m_ptGrid = CPoint( ((int)(scrollpos.x / GridSize.cx)) * GridSize.cx, ((int)(scrollpos.y / GridSize.cy)) * GridSize.cy ); m_vPos.push_back( m_ptGrid ); OutCursorDCxRop(); Invalidate(); CScrollView::OnLButtonUp(nFlags, point); }

이 값을 사용해서 여러가지 동작들을 추가 하시면 됩니다.
하지만 이것저것 하다 보면 GetScrollPosition()의 값을 보정해서 해줘야 하는 경우가 많이 발생을 하게 됩니다. 그때 마다 너무 많은 작업량이 좀 힘들더라구요.

팁을 드리면 CScrollView에 CView를 추가한 후에 CScrollView의 Create(), OnSize() 부분에 코드를 적당히 넣어서 CView를 내부에 크기 만큼 심어 놓습니다.
그렇게 한후에 마우스 픽킹을 해보시면 마우스 이벤트가 CScrollView로 가지 않고 CView로 가는 것을
확인할 수 있을겁니다.
더욱더 놀라운건 ^^.. 스크롤로 해서 화면을 움직여도 현재 찍힌 화면의 좌표는 스크롤로 이동한 좌표 즉, 화면이 스크롤 만큼 이동한 후에 CView의 이동된 좌표값을 바로 리턴해 준다는 겁니다.

이상.. 가볍게 적었지만 CView 추가 하는 부분은 생략하도록 하겠습니다. (귀찮네요 ^^)
모르거나 필요하시면 제가 바로 답변 드릴테니 뎃글 달아 주세요..
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/03/27 17:35

[MFC TOOLS] CView 컨트롤 삽입하기

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;
}

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

이후 작업은 입맛에 맞게 ^^
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/03/26 02:33

[MFC] CScrollView 에 CView 를 추가 하면 어떻게 될까요?

Google