CFormView를 이용한 간단한 프로그램을 만들 때 Visual C++ 에서 제공하는 Document/View Architecture를 사용할 경우 불필요한 작업이 많은 것 같아 이를 사용하지 않고 만드는 방법을 알아보았다.
SDI 프로젝트를 만들때 Document/View Architecture 옵션을 제거하고 프로젝트를 만든 후 기본적으로 만들어지는 View외에 추가로 CFormView를 상속받는 View을 하나 만들어 기존 View와 교체를 하면 가능하였다.
하지만 새로운 View를 만들어 교체를 할 때 일반 변수를 이용하여 Stack에 만들경우 프로그램 종료시 에러가 발생하였다. 이미 해제된 View를 다시한 번 삭제하려 하기때문인 것 같았다. Heap 메모리에 만들어지도록 하면 문제가 없었다.
//CChildFormView.h class CChildFormView : public CFormView { public: // Change constructor to public. It is private by default CChildFormView(); // protected constructor used by dynamic creation virtual ~CChildFormView(); }; //CMainFrm.h #include "ChildFormView.h" class CMainFrame : public CFrameWnd { protected: // control bar embedded members CChildFormView *m_pWndView; }; //CMainFrm.cpp int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // First, build the view context structure CCreateContext ccx; // Designate the class from which to build the view ccx.m_pNewViewClass = RUNTIME_CLASS(CChildFormView); // Using the structure, create a view m_pWndView = DYNAMIC_DOWNCAST(CChildFormView, this->CreateView(&ccx)); // Did we succeed ? if (!m_pWndView) { TRACE0("Creation of view failed\n"); return -1; } // Do layout recalc RecalcLayout(); // Show the view and do an initial update m_pWndView->ShowWindow(SW_SHOW); m_pWndView->OnInitialUpdate(); // Set this view active SetActiveView(m_pWndView); // Order it to resize the parent window to fit m_pWndView->ResizeParentToFit(FALSE); // create a view to occupy the client area of the frame // if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL)) // { // TRACE0("Failed to create view window\n"); // return -1; // } if (!m_wndStatusBar.Create(this)) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)); return 0; }
참조: https://www.codeproject.com/Articles/5445/Using-views-effectively-without-the-doc-view-overh
'Dev Story > Tips' 카테고리의 다른 글
[MFC] 관리자 권한을 필요로 하는 프로그램 만들기 (0) | 2020.06.18 |
---|---|
[MFC] Tree 컨트롤 노드 확장하기 (0) | 2020.05.29 |
Visual C++ 디버깅 메모리 상태 (0) | 2019.03.06 |
[C++] OS 버전 알아내기 (0) | 2019.01.29 |
[Python] 파일 보안 설정 변경(File Security) (0) | 2017.08.22 |