www.pudn.com > vc6135765900355.rar > DrawCliView.cpp


// DrawCliView.cpp : implementation of the CDrawCliView class 
// 
 
#include "stdafx.h" 
#include "DrawCli.h" 
 
#include "DrawCliDoc.h" 
#include "CntrItem.h" 
#include "DrawCliView.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CDrawCliView 
 
IMPLEMENT_DYNCREATE(CDrawCliView, CView) 
 
BEGIN_MESSAGE_MAP(CDrawCliView, CView) 
	//{{AFX_MSG_MAP(CDrawCliView) 
		// NOTE - the ClassWizard will add and remove mapping macros here. 
		//    DO NOT EDIT what you see in these blocks of generated code! 
	ON_WM_DESTROY() 
	ON_WM_SETFOCUS() 
	ON_WM_SIZE() 
	ON_COMMAND(ID_OLE_INSERT_NEW, OnInsertObject) 
	ON_COMMAND(ID_CANCEL_EDIT_CNTR, OnCancelEditCntr) 
	//}}AFX_MSG_MAP 
	// Standard printing commands 
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) 
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) 
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CDrawCliView construction/destruction 
 
CDrawCliView::CDrawCliView() 
{ 
	m_pSelection = NULL; 
	// TODO: add construction code here 
 
} 
 
CDrawCliView::~CDrawCliView() 
{ 
} 
 
BOOL CDrawCliView::PreCreateWindow(CREATESTRUCT& cs) 
{ 
	// TODO: Modify the Window class or styles here by modifying 
	//  the CREATESTRUCT cs 
 
	return CView::PreCreateWindow(cs); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CDrawCliView drawing 
 
void CDrawCliView::OnDraw(CDC* pDC) 
{ 
	CDrawCliDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
	// TODO: add draw code for native data here 
	// TODO: also draw all OLE items in the document 
 
	// Draw the selection at an arbitrary position.  This code should be 
	//  removed once your real drawing code is implemented.  This position 
	//  corresponds exactly to the rectangle returned by CDrawItem, 
	//  to give the effect of in-place editing. 
 
	// TODO: remove this code when final draw code is complete. 
 
	if (m_pSelection == NULL) 
	{ 
		POSITION pos = pDoc->GetStartPosition(); 
		m_pSelection = (CDrawItem*)pDoc->GetNextClientItem(pos); 
	} 
	if (m_pSelection != NULL) 
		m_pSelection->Draw(pDC, CRect(10, 10, 210, 210)); 
} 
 
void CDrawCliView::OnInitialUpdate() 
{ 
	CView::OnInitialUpdate(); 
 
 
	// TODO: remove this code when final selection model code is written 
	m_pSelection = NULL;    // initialize selection 
 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CDrawCliView printing 
 
BOOL CDrawCliView::OnPreparePrinting(CPrintInfo* pInfo) 
{ 
	// default preparation 
	return DoPreparePrinting(pInfo); 
} 
 
void CDrawCliView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
	// TODO: add extra initialization before printing 
} 
 
void CDrawCliView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
	// TODO: add cleanup after printing 
} 
 
void CDrawCliView::OnDestroy() 
{ 
	// Deactivate the item on destruction; this is important 
	// when a splitter view is being used. 
   CView::OnDestroy(); 
   COleClientItem* pActiveItem = GetDocument()->GetInPlaceActiveItem(this); 
   if (pActiveItem != NULL && pActiveItem->GetActiveView() == this) 
   { 
      pActiveItem->Deactivate(); 
      ASSERT(GetDocument()->GetInPlaceActiveItem(this) == NULL); 
   } 
} 
 
 
///////////////////////////////////////////////////////////////////////////// 
// OLE Client support and commands 
 
BOOL CDrawCliView::IsSelected(const CObject* pDocItem) const 
{ 
	// The implementation below is adequate if your selection consists of 
	//  only CDrawItem objects.  To handle different selection 
	//  mechanisms, the implementation here should be replaced. 
 
	// TODO: implement this function that tests for a selected OLE client item 
 
	return pDocItem == m_pSelection; 
} 
 
void CDrawCliView::OnInsertObject() 
{ 
	// Invoke the standard Insert Object dialog box to obtain information 
	//  for new CDrawItem object. 
	COleInsertDialog dlg; 
	if (dlg.DoModal() != IDOK) 
		return; 
 
	BeginWaitCursor(); 
 
	CDrawItem* pItem = NULL; 
	TRY 
	{ 
		// Create new item connected to this document. 
		CDrawCliDoc* pDoc = GetDocument(); 
		ASSERT_VALID(pDoc); 
		pItem = new CDrawItem(pDoc); 
		ASSERT_VALID(pItem); 
 
		// Initialize the item from the dialog data. 
		if (!dlg.CreateItem(pItem)) 
			AfxThrowMemoryException();  // any exception will do 
		ASSERT_VALID(pItem); 
		 
        if (dlg.GetSelectionType() == COleInsertDialog::createNewItem) 
			pItem->DoVerb(OLEIVERB_SHOW, this); 
 
		ASSERT_VALID(pItem); 
 
		// As an arbitrary user interface design, this sets the selection 
		//  to the last item inserted. 
 
		// TODO: reimplement selection as appropriate for your application 
 
		m_pSelection = pItem;   // set selection to last inserted item 
		pDoc->UpdateAllViews(NULL); 
	} 
	CATCH(CException, e) 
	{ 
		if (pItem != NULL) 
		{ 
			ASSERT_VALID(pItem); 
			pItem->Delete(); 
		} 
		AfxMessageBox(IDP_FAILED_TO_CREATE); 
	} 
	END_CATCH 
 
	EndWaitCursor(); 
} 
 
// The following command handler provides the standard keyboard 
//  user interface to cancel an in-place editing session.  Here, 
//  the container (not the server) causes the deactivation. 
void CDrawCliView::OnCancelEditCntr() 
{ 
	// Close any in-place active item on this view. 
	COleClientItem* pActiveItem = GetDocument()->GetInPlaceActiveItem(this); 
	if (pActiveItem != NULL) 
	{ 
		pActiveItem->Close(); 
	} 
	ASSERT(GetDocument()->GetInPlaceActiveItem(this) == NULL); 
} 
 
// Special handling of OnSetFocus and OnSize are required for a container 
//  when an object is being edited in-place. 
void CDrawCliView::OnSetFocus(CWnd* pOldWnd) 
{ 
	COleClientItem* pActiveItem = GetDocument()->GetInPlaceActiveItem(this); 
	if (pActiveItem != NULL && 
		pActiveItem->GetItemState() == COleClientItem::activeUIState) 
	{ 
		// need to set focus to this item if it is in the same view 
		CWnd* pWnd = pActiveItem->GetInPlaceWindow(); 
		if (pWnd != NULL) 
		{ 
			pWnd->SetFocus();   // don't call the base class 
			return; 
		} 
	} 
 
	CView::OnSetFocus(pOldWnd); 
} 
 
void CDrawCliView::OnSize(UINT nType, int cx, int cy) 
{ 
	CView::OnSize(nType, cx, cy); 
	COleClientItem* pActiveItem = GetDocument()->GetInPlaceActiveItem(this); 
	if (pActiveItem != NULL) 
		pActiveItem->SetItemRects(); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CDrawCliView diagnostics 
 
#ifdef _DEBUG 
void CDrawCliView::AssertValid() const 
{ 
	CView::AssertValid(); 
} 
 
void CDrawCliView::Dump(CDumpContext& dc) const 
{ 
	CView::Dump(dc); 
} 
 
CDrawCliDoc* CDrawCliView::GetDocument() // non-debug version is inline 
{ 
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDrawCliDoc))); 
	return (CDrawCliDoc*)m_pDocument; 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CDrawCliView message handlers