DrawCliView.cpp
上传用户:seaboy_04
上传日期:2013-02-24
资源大小:284k
文件大小:7k
源码类别:

其他行业

开发平台:

Visual C++

  1. // DrawCliView.cpp : implementation of the CDrawCliView class
  2. //
  3. #include "stdafx.h"
  4. #include "DrawCli.h"
  5. #include "DrawCliDoc.h"
  6. #include "CntrItem.h"
  7. #include "DrawCliView.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CDrawCliView
  15. IMPLEMENT_DYNCREATE(CDrawCliView, CView)
  16. BEGIN_MESSAGE_MAP(CDrawCliView, CView)
  17. //{{AFX_MSG_MAP(CDrawCliView)
  18. // NOTE - the ClassWizard will add and remove mapping macros here.
  19. //    DO NOT EDIT what you see in these blocks of generated code!
  20. ON_WM_DESTROY()
  21. ON_WM_SETFOCUS()
  22. ON_WM_SIZE()
  23. ON_COMMAND(ID_OLE_INSERT_NEW, OnInsertObject)
  24. ON_COMMAND(ID_CANCEL_EDIT_CNTR, OnCancelEditCntr)
  25. //}}AFX_MSG_MAP
  26. // Standard printing commands
  27. ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
  28. ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
  29. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
  30. END_MESSAGE_MAP()
  31. /////////////////////////////////////////////////////////////////////////////
  32. // CDrawCliView construction/destruction
  33. CDrawCliView::CDrawCliView()
  34. {
  35. m_pSelection = NULL;
  36. // TODO: add construction code here
  37. }
  38. CDrawCliView::~CDrawCliView()
  39. {
  40. }
  41. BOOL CDrawCliView::PreCreateWindow(CREATESTRUCT& cs)
  42. {
  43. // TODO: Modify the Window class or styles here by modifying
  44. //  the CREATESTRUCT cs
  45. return CView::PreCreateWindow(cs);
  46. }
  47. /////////////////////////////////////////////////////////////////////////////
  48. // CDrawCliView drawing
  49. void CDrawCliView::OnDraw(CDC* pDC)
  50. {
  51. CDrawCliDoc* pDoc = GetDocument();
  52. ASSERT_VALID(pDoc);
  53. // TODO: add draw code for native data here
  54. // TODO: also draw all OLE items in the document
  55. // Draw the selection at an arbitrary position.  This code should be
  56. //  removed once your real drawing code is implemented.  This position
  57. //  corresponds exactly to the rectangle returned by CDrawItem,
  58. //  to give the effect of in-place editing.
  59. // TODO: remove this code when final draw code is complete.
  60. if (m_pSelection == NULL)
  61. {
  62. POSITION pos = pDoc->GetStartPosition();
  63. m_pSelection = (CDrawItem*)pDoc->GetNextClientItem(pos);
  64. }
  65. if (m_pSelection != NULL)
  66. m_pSelection->Draw(pDC, CRect(10, 10, 210, 210));
  67. }
  68. void CDrawCliView::OnInitialUpdate()
  69. {
  70. CView::OnInitialUpdate();
  71. // TODO: remove this code when final selection model code is written
  72. m_pSelection = NULL;    // initialize selection
  73. }
  74. /////////////////////////////////////////////////////////////////////////////
  75. // CDrawCliView printing
  76. BOOL CDrawCliView::OnPreparePrinting(CPrintInfo* pInfo)
  77. {
  78. // default preparation
  79. return DoPreparePrinting(pInfo);
  80. }
  81. void CDrawCliView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  82. {
  83. // TODO: add extra initialization before printing
  84. }
  85. void CDrawCliView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  86. {
  87. // TODO: add cleanup after printing
  88. }
  89. void CDrawCliView::OnDestroy()
  90. {
  91. // Deactivate the item on destruction; this is important
  92. // when a splitter view is being used.
  93.    CView::OnDestroy();
  94.    COleClientItem* pActiveItem = GetDocument()->GetInPlaceActiveItem(this);
  95.    if (pActiveItem != NULL && pActiveItem->GetActiveView() == this)
  96.    {
  97.       pActiveItem->Deactivate();
  98.       ASSERT(GetDocument()->GetInPlaceActiveItem(this) == NULL);
  99.    }
  100. }
  101. /////////////////////////////////////////////////////////////////////////////
  102. // OLE Client support and commands
  103. BOOL CDrawCliView::IsSelected(const CObject* pDocItem) const
  104. {
  105. // The implementation below is adequate if your selection consists of
  106. //  only CDrawItem objects.  To handle different selection
  107. //  mechanisms, the implementation here should be replaced.
  108. // TODO: implement this function that tests for a selected OLE client item
  109. return pDocItem == m_pSelection;
  110. }
  111. void CDrawCliView::OnInsertObject()
  112. {
  113. // Invoke the standard Insert Object dialog box to obtain information
  114. //  for new CDrawItem object.
  115. COleInsertDialog dlg;
  116. if (dlg.DoModal() != IDOK)
  117. return;
  118. BeginWaitCursor();
  119. CDrawItem* pItem = NULL;
  120. TRY
  121. {
  122. // Create new item connected to this document.
  123. CDrawCliDoc* pDoc = GetDocument();
  124. ASSERT_VALID(pDoc);
  125. pItem = new CDrawItem(pDoc);
  126. ASSERT_VALID(pItem);
  127. // Initialize the item from the dialog data.
  128. if (!dlg.CreateItem(pItem))
  129. AfxThrowMemoryException();  // any exception will do
  130. ASSERT_VALID(pItem);
  131.         if (dlg.GetSelectionType() == COleInsertDialog::createNewItem)
  132. pItem->DoVerb(OLEIVERB_SHOW, this);
  133. ASSERT_VALID(pItem);
  134. // As an arbitrary user interface design, this sets the selection
  135. //  to the last item inserted.
  136. // TODO: reimplement selection as appropriate for your application
  137. m_pSelection = pItem;   // set selection to last inserted item
  138. pDoc->UpdateAllViews(NULL);
  139. }
  140. CATCH(CException, e)
  141. {
  142. if (pItem != NULL)
  143. {
  144. ASSERT_VALID(pItem);
  145. pItem->Delete();
  146. }
  147. AfxMessageBox(IDP_FAILED_TO_CREATE);
  148. }
  149. END_CATCH
  150. EndWaitCursor();
  151. }
  152. // The following command handler provides the standard keyboard
  153. //  user interface to cancel an in-place editing session.  Here,
  154. //  the container (not the server) causes the deactivation.
  155. void CDrawCliView::OnCancelEditCntr()
  156. {
  157. // Close any in-place active item on this view.
  158. COleClientItem* pActiveItem = GetDocument()->GetInPlaceActiveItem(this);
  159. if (pActiveItem != NULL)
  160. {
  161. pActiveItem->Close();
  162. }
  163. ASSERT(GetDocument()->GetInPlaceActiveItem(this) == NULL);
  164. }
  165. // Special handling of OnSetFocus and OnSize are required for a container
  166. //  when an object is being edited in-place.
  167. void CDrawCliView::OnSetFocus(CWnd* pOldWnd)
  168. {
  169. COleClientItem* pActiveItem = GetDocument()->GetInPlaceActiveItem(this);
  170. if (pActiveItem != NULL &&
  171. pActiveItem->GetItemState() == COleClientItem::activeUIState)
  172. {
  173. // need to set focus to this item if it is in the same view
  174. CWnd* pWnd = pActiveItem->GetInPlaceWindow();
  175. if (pWnd != NULL)
  176. {
  177. pWnd->SetFocus();   // don't call the base class
  178. return;
  179. }
  180. }
  181. CView::OnSetFocus(pOldWnd);
  182. }
  183. void CDrawCliView::OnSize(UINT nType, int cx, int cy)
  184. {
  185. CView::OnSize(nType, cx, cy);
  186. COleClientItem* pActiveItem = GetDocument()->GetInPlaceActiveItem(this);
  187. if (pActiveItem != NULL)
  188. pActiveItem->SetItemRects();
  189. }
  190. /////////////////////////////////////////////////////////////////////////////
  191. // CDrawCliView diagnostics
  192. #ifdef _DEBUG
  193. void CDrawCliView::AssertValid() const
  194. {
  195. CView::AssertValid();
  196. }
  197. void CDrawCliView::Dump(CDumpContext& dc) const
  198. {
  199. CView::Dump(dc);
  200. }
  201. CDrawCliDoc* CDrawCliView::GetDocument() // non-debug version is inline
  202. {
  203. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDrawCliDoc)));
  204. return (CDrawCliDoc*)m_pDocument;
  205. }
  206. #endif //_DEBUG
  207. /////////////////////////////////////////////////////////////////////////////
  208. // CDrawCliView message handlers