home *** CD-ROM | disk | FTP | other *** search
/ BUG 4 / BUGCD1997_05.BIN / aplic / visualj / vjtrial.exe / RCDATA / CABINET / mfcapwz.dll / TEMPLATE / VIEW.CPP < prev    next >
C/C++ Source or Header  |  1997-01-28  |  13KB  |  458 lines

  1. // $$view_ifile$$.cpp : implementation of the $$VIEW_CLASS$$ class
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "$$root$$.h"
  6.  
  7. $$IF(CRecordView || CDaoRecordView)
  8. #include "$$recset_hfile$$.h"
  9. $$ENDIF
  10. #include "$$doc_hfile$$.h"
  11. $$IF(CONTAINER || CONTAINER_SERVER)
  12. #include "$$cntritem_hfile$$.h"
  13. $$ENDIF
  14. #include "$$view_hfile$$.h"
  15.  
  16. #ifdef _DEBUG
  17. #define new DEBUG_NEW
  18. #undef THIS_FILE
  19. static char THIS_FILE[] = __FILE__;
  20. #endif
  21.  
  22. /////////////////////////////////////////////////////////////////////////////
  23. // $$VIEW_CLASS$$
  24.  
  25. IMPLEMENT_DYNCREATE($$VIEW_CLASS$$, $$VIEW_BASE_CLASS$$)
  26.  
  27. BEGIN_MESSAGE_MAP($$VIEW_CLASS$$, $$VIEW_BASE_CLASS$$)
  28.     //{{AFX_MSG_MAP($$VIEW_CLASS$$)
  29. $$IF(VERBOSE)
  30.         // NOTE - the ClassWizard will add and remove mapping macros here.
  31.         //    DO NOT EDIT what you see in these blocks of generated code!
  32. $$ENDIF
  33. $$IF(CONTAINER || CONTAINER_SERVER)
  34.     ON_WM_DESTROY()
  35. $$IF(!CRichEditView)
  36.     ON_WM_SETFOCUS()
  37.     ON_WM_SIZE()
  38.     ON_COMMAND(ID_OLE_INSERT_NEW, OnInsertObject)
  39.     ON_COMMAND(ID_CANCEL_EDIT_CNTR, OnCancelEditCntr)
  40. $$ENDIF //!CRichEditView
  41. $$ENDIF //CONTAINERS
  42. $$IF(MINI_SERVER || FULL_SERVER || CONTAINER_SERVER)
  43.     ON_COMMAND(ID_CANCEL_EDIT_SRVR, OnCancelEditSrvr)
  44. $$ENDIF
  45.     //}}AFX_MSG_MAP
  46. $$IF(PRINT)
  47.     // Standard printing commands
  48.     ON_COMMAND(ID_FILE_PRINT, $$VIEW_BASE_CLASS$$::OnFilePrint)
  49.     ON_COMMAND(ID_FILE_PRINT_DIRECT, $$VIEW_BASE_CLASS$$::OnFilePrint)
  50.     ON_COMMAND(ID_FILE_PRINT_PREVIEW, $$VIEW_BASE_CLASS$$::OnFilePrintPreview)
  51. $$ENDIF //PRINT
  52. END_MESSAGE_MAP()
  53.  
  54. /////////////////////////////////////////////////////////////////////////////
  55. // $$VIEW_CLASS$$ construction/destruction
  56.  
  57. $$VIEW_CLASS$$::$$VIEW_CLASS$$()
  58. $$IF(CFormView || CRecordView || CDaoRecordView)
  59.     : $$VIEW_BASE_CLASS$$($$VIEW_CLASS$$::IDD)
  60. $$ENDIF
  61. {
  62. $$IF(CFormView || CRecordView || CDaoRecordView)
  63.     //{{AFX_DATA_INIT($$VIEW_CLASS$$)
  64.         // NOTE: the ClassWizard will add member initialization here
  65. $$IF(CRecordView || CDaoRecordView)
  66.     m_pSet = NULL;
  67. $$ENDIF
  68.     //}}AFX_DATA_INIT
  69. $$ENDIF
  70. $$IF(CONTAINER || CONTAINER_SERVER)
  71. $$IF(!CRichEditView)
  72.     m_pSelection = NULL;
  73. $$ENDIF //!CRichEditView
  74. $$ENDIF //CONTAINERS
  75. $$IF(VERBOSE)
  76.     // TODO: add construction code here
  77.  
  78. $$ENDIF
  79. }
  80.  
  81. $$VIEW_CLASS$$::~$$VIEW_CLASS$$()
  82. {
  83. }
  84. $$IF(CFormView || CRecordView || CDaoRecordView)
  85.  
  86. void $$VIEW_CLASS$$::DoDataExchange(CDataExchange* pDX)
  87. {
  88.     $$VIEW_BASE_CLASS$$::DoDataExchange(pDX);
  89.     //{{AFX_DATA_MAP($$VIEW_CLASS$$)
  90.         // NOTE: the ClassWizard will add DDX and DDV calls here
  91.     //}}AFX_DATA_MAP
  92. }
  93. $$ENDIF
  94.  
  95. BOOL $$VIEW_CLASS$$::PreCreateWindow(CREATESTRUCT& cs)
  96. {
  97. $$IF(VERBOSE)
  98.     // TODO: Modify the Window class or styles here by modifying
  99.     //  the CREATESTRUCT cs
  100.  
  101. $$ENDIF //VERBOSE
  102. $$IF(CEditView)
  103.     BOOL bPreCreated = CEditView::PreCreateWindow(cs);
  104.     cs.style &= ~(ES_AUTOHSCROLL|WS_HSCROLL);    // Enable word-wrapping
  105.  
  106.     return bPreCreated;
  107. $$ELSE //!CEditView
  108.     return $$VIEW_BASE_CLASS$$::PreCreateWindow(cs);
  109. $$ENDIF //CEditView
  110. }
  111. $$IF(CFormView || CRecordView || CDaoRecordView)
  112. $$ELIF(!CRichEditView)
  113.  
  114. /////////////////////////////////////////////////////////////////////////////
  115. // $$VIEW_CLASS$$ drawing
  116.  
  117. void $$VIEW_CLASS$$::OnDraw(CDC* pDC)
  118. {
  119.     $$DOC_CLASS$$* pDoc = GetDocument();
  120.     ASSERT_VALID(pDoc);
  121. $$IF(VERBOSE)
  122.  
  123.     // TODO: add draw code for native data here
  124. $$IF(CONTAINER || CONTAINER_SERVER)
  125. $$IF(!CRichEditView)
  126.     // TODO: also draw all OLE items in the document
  127. $$ENDIF //!CRichEditView
  128. $$ENDIF //CONTAINERS
  129. $$ENDIF //VERBOSE
  130. $$IF(CONTAINER || CONTAINER_SERVER)
  131. $$IF(!CRichEditView)
  132.  
  133.     // Draw the selection at an arbitrary position.  This code should be
  134.     //  removed once your real drawing code is implemented.  This position
  135.     //  corresponds exactly to the rectangle returned by $$CNTRITEM_CLASS$$,
  136.     //  to give the effect of in-place editing.
  137.  
  138.     // TODO: remove this code when final draw code is complete.
  139.  
  140.     if (m_pSelection == NULL)
  141.     {
  142.         POSITION pos = pDoc->GetStartPosition();
  143.         m_pSelection = ($$CNTRITEM_CLASS$$*)pDoc->GetNextClientItem(pos);
  144.     }
  145.     if (m_pSelection != NULL)
  146.         m_pSelection->Draw(pDC, CRect(10, 10, 210, 210));
  147. $$ENDIF //!CRichEditView
  148. $$ENDIF //CONTAINERS
  149. }
  150. $$ENDIF // !(CFormView || CRecordView || CDaoRecordView)
  151. $$IF(CScrollView || CONTAINER || CONTAINER_SERVER || CRecordView || CDaoRecordView || CListView || CTreeView)
  152.  
  153. void $$VIEW_CLASS$$::OnInitialUpdate()
  154. {
  155. $$IF(CRecordView || CDaoRecordView)
  156.     m_pSet = &GetDocument()->$$RECSET_VARIABLE$$;
  157. $$ENDIF
  158.     $$VIEW_BASE_CLASS$$::OnInitialUpdate();
  159. $$IF(VERBOSE)
  160. $$IF(CListView)
  161.  
  162.     // TODO: You may populate your ListView with items by directly accessing
  163.     //  its list control through a call to GetListCtrl().
  164. $$ELIF(CTreeView)
  165.  
  166.     // TODO: You may populate your TreeView with items by directly accessing
  167.     //  its tree control through a call to GetTreeCtrl().
  168. $$ENDIF //Views
  169. $$ENDIF //VERBOSE
  170. $$IF(CONTAINER || CONTAINER_SERVER)
  171. $$IF(!CRichEditView)
  172.  
  173. $$IF(VERBOSE)
  174.     // TODO: remove this code when final selection model code is written
  175. $$ENDIF //VERBOSE
  176.     m_pSelection = NULL;    // initialize selection
  177.  
  178. $$ENDIF //!CRichEditView
  179. $$IF(CRichEditView)
  180.  
  181. $$IF(VERBOSE)
  182.     // Set the printing margins (720 twips = 1/2 inch).
  183. $$ENDIF //VERBOSE
  184.     SetMargins(CRect(720, 720, 720, 720));
  185. $$ENDIF    //CRichEditView
  186. $$ENDIF //CONTAINERS
  187. $$IF(CScrollView)
  188.     CSize sizeTotal;
  189. $$IF(VERBOSE)
  190.     // TODO: calculate the total size of this view
  191. $$ENDIF
  192.     sizeTotal.cx = sizeTotal.cy = 100;
  193.     SetScrollSizes(MM_TEXT, sizeTotal);
  194. $$ENDIF
  195. }
  196. $$ENDIF // CScrollView || CONTAINER || CONTAINER_SERVER || CRecordView || CDaoRecordView
  197. $$IF(PRINT)
  198.  
  199. /////////////////////////////////////////////////////////////////////////////
  200. // $$VIEW_CLASS$$ printing
  201.  
  202. BOOL $$VIEW_CLASS$$::OnPreparePrinting(CPrintInfo* pInfo)
  203. {
  204. $$IF(CEditView)
  205.     // default CEditView preparation
  206.     return CEditView::OnPreparePrinting(pInfo);
  207. $$ELSE
  208.     // default preparation
  209.     return DoPreparePrinting(pInfo);
  210. $$ENDIF
  211. }
  212.  
  213. $$IF(!CRichEditView)
  214. $$IF(CEditView)
  215. void $$VIEW_CLASS$$::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
  216. $$ELSE
  217. void $$VIEW_CLASS$$::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  218. $$ENDIF //CEditView
  219. {
  220. $$IF(CEditView)
  221. $$IF(VERBOSE)
  222.     // Default CEditView begin printing.
  223. $$ENDIF //VERBOSE
  224.     CEditView::OnBeginPrinting(pDC, pInfo);
  225. $$ELSE
  226. $$IF(VERBOSE)
  227.     // TODO: add extra initialization before printing
  228. $$ENDIF //VERBOSE
  229. $$ENDIF //CEditView
  230. }
  231.  
  232. $$IF(CEditView)
  233. void $$VIEW_CLASS$$::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
  234. $$ELSE
  235. void $$VIEW_CLASS$$::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  236. $$ENDIF //CEditView
  237. {
  238. $$IF(CEditView)
  239. $$IF(VERBOSE)
  240.     // Default CEditView end printing
  241. $$ENDIF //VERBOSE
  242.     CEditView::OnEndPrinting(pDC, pInfo);
  243. $$ELSE
  244. $$IF(VERBOSE)
  245.     // TODO: add cleanup after printing
  246. $$ENDIF //VERBOSE
  247. $$ENDIF //CEditView
  248. }
  249. $$ENDIF //!CRichEditView
  250. $$IF(CFormView)
  251.  
  252. void $$VIEW_CLASS$$::OnPrint(CDC* pDC, CPrintInfo*)
  253. {
  254. $$IF(VERBOSE)
  255.     // TODO: add code to print the controls
  256. $$ENDIF
  257. }
  258. $$ENDIF //CFormView
  259. $$ENDIF //PRINT
  260. $$IF(CONTAINER || CONTAINER_SERVER)
  261.  
  262. void $$VIEW_CLASS$$::OnDestroy()
  263. {
  264. $$IF(VERBOSE)
  265.     // Deactivate the item on destruction; this is important
  266.     // when a splitter view is being used.
  267. $$ENDIF
  268.    $$VIEW_BASE_CLASS$$::OnDestroy();
  269.    COleClientItem* pActiveItem = GetDocument()->GetInPlaceActiveItem(this);
  270.    if (pActiveItem != NULL && pActiveItem->GetActiveView() == this)
  271.    {
  272.       pActiveItem->Deactivate();
  273.       ASSERT(GetDocument()->GetInPlaceActiveItem(this) == NULL);
  274.    }
  275. }
  276.  
  277. $$IF(!CRichEditView)
  278.  
  279. /////////////////////////////////////////////////////////////////////////////
  280. // OLE Client support and commands
  281.  
  282. BOOL $$VIEW_CLASS$$::IsSelected(const CObject* pDocItem) const
  283. {
  284. $$IF(VERBOSE)
  285.     // The implementation below is adequate if your selection consists of
  286.     //  only $$CNTRITEM_CLASS$$ objects.  To handle different selection
  287.     //  mechanisms, the implementation here should be replaced.
  288.  
  289.     // TODO: implement this function that tests for a selected OLE client item
  290.  
  291. $$ENDIF
  292.     return pDocItem == m_pSelection;
  293. }
  294.  
  295. void $$VIEW_CLASS$$::OnInsertObject()
  296. {
  297. $$IF(VERBOSE)
  298.     // Invoke the standard Insert Object dialog box to obtain information
  299.     //  for new $$CNTRITEM_CLASS$$ object.
  300. $$ENDIF
  301.     COleInsertDialog dlg;
  302.     if (dlg.DoModal() != IDOK)
  303.         return;
  304.  
  305.     BeginWaitCursor();
  306.  
  307.     $$CNTRITEM_CLASS$$* pItem = NULL;
  308.     TRY
  309.     {
  310. $$IF(VERBOSE)
  311.         // Create new item connected to this document.
  312. $$ENDIF
  313.         $$DOC_CLASS$$* pDoc = GetDocument();
  314.         ASSERT_VALID(pDoc);
  315.         pItem = new $$CNTRITEM_CLASS$$(pDoc);
  316.         ASSERT_VALID(pItem);
  317.  
  318. $$IF(VERBOSE)
  319.         // Initialize the item from the dialog data.
  320. $$ENDIF
  321.         if (!dlg.CreateItem(pItem))
  322.             AfxThrowMemoryException();  // any exception will do
  323.         ASSERT_VALID(pItem);
  324.  
  325. $$IF(VERBOSE)
  326.         // If item created from class list (not from file) then launch
  327.         //  the server to edit the item.
  328. $$ENDIF
  329.         if (dlg.GetSelectionType() == COleInsertDialog::createNewItem)
  330.             pItem->DoVerb(OLEIVERB_SHOW, this);
  331.  
  332.         ASSERT_VALID(pItem);
  333. $$IF(VERBOSE)
  334.  
  335.         // As an arbitrary user interface design, this sets the selection
  336.         //  to the last item inserted.
  337.  
  338.         // TODO: reimplement selection as appropriate for your application
  339. $$ENDIF
  340.  
  341.         m_pSelection = pItem;   // set selection to last inserted item
  342.         pDoc->UpdateAllViews(NULL);
  343.     }
  344.     CATCH(CException, e)
  345.     {
  346.         if (pItem != NULL)
  347.         {
  348.             ASSERT_VALID(pItem);
  349.             pItem->Delete();
  350.         }
  351.         AfxMessageBox(IDP_FAILED_TO_CREATE);
  352.     }
  353.     END_CATCH
  354.  
  355.     EndWaitCursor();
  356. }
  357.  
  358. $$IF(VERBOSE)
  359. // The following command handler provides the standard keyboard
  360. //  user interface to cancel an in-place editing session.  Here,
  361. //  the container (not the server) causes the deactivation.
  362. $$ENDIF
  363. void $$VIEW_CLASS$$::OnCancelEditCntr()
  364. {
  365.     // Close any in-place active item on this view.
  366.     COleClientItem* pActiveItem = GetDocument()->GetInPlaceActiveItem(this);
  367.     if (pActiveItem != NULL)
  368.     {
  369.         pActiveItem->Close();
  370.     }
  371.     ASSERT(GetDocument()->GetInPlaceActiveItem(this) == NULL);
  372. }
  373.  
  374. $$IF(VERBOSE)
  375. // Special handling of OnSetFocus and OnSize are required for a container
  376. //  when an object is being edited in-place.
  377. $$ENDIF
  378. void $$VIEW_CLASS$$::OnSetFocus(CWnd* pOldWnd)
  379. {
  380.     COleClientItem* pActiveItem = GetDocument()->GetInPlaceActiveItem(this);
  381.     if (pActiveItem != NULL &&
  382.         pActiveItem->GetItemState() == COleClientItem::activeUIState)
  383.     {
  384.         // need to set focus to this item if it is in the same view
  385.         CWnd* pWnd = pActiveItem->GetInPlaceWindow();
  386.         if (pWnd != NULL)
  387.         {
  388.             pWnd->SetFocus();   // don't call the base class
  389.             return;
  390.         }
  391.     }
  392.  
  393.     $$VIEW_BASE_CLASS$$::OnSetFocus(pOldWnd);
  394. }
  395.  
  396. void $$VIEW_CLASS$$::OnSize(UINT nType, int cx, int cy)
  397. {
  398.     $$VIEW_BASE_CLASS$$::OnSize(nType, cx, cy);
  399.     COleClientItem* pActiveItem = GetDocument()->GetInPlaceActiveItem(this);
  400.     if (pActiveItem != NULL)
  401.         pActiveItem->SetItemRects();
  402. }
  403. $$ENDIF //!CRichEditView
  404. $$ENDIF //CONTAINER || CONTAINER_SERVER
  405. $$IF(MINI_SERVER || FULL_SERVER || CONTAINER_SERVER)
  406.  
  407. /////////////////////////////////////////////////////////////////////////////
  408. // OLE Server support
  409.  
  410. $$IF(VERBOSE)
  411. // The following command handler provides the standard keyboard
  412. //  user interface to cancel an in-place editing session.  Here,
  413. //  the server (not the container) causes the deactivation.
  414. $$ENDIF
  415. void $$VIEW_CLASS$$::OnCancelEditSrvr()
  416. {
  417.     GetDocument()->OnDeactivateUI(FALSE);
  418. }
  419. $$ENDIF //SERVERS
  420.  
  421. /////////////////////////////////////////////////////////////////////////////
  422. // $$VIEW_CLASS$$ diagnostics
  423.  
  424. #ifdef _DEBUG
  425. void $$VIEW_CLASS$$::AssertValid() const
  426. {
  427.     $$VIEW_BASE_CLASS$$::AssertValid();
  428. }
  429.  
  430. void $$VIEW_CLASS$$::Dump(CDumpContext& dc) const
  431. {
  432.     $$VIEW_BASE_CLASS$$::Dump(dc);
  433. }
  434.  
  435. $$DOC_CLASS$$* $$VIEW_CLASS$$::GetDocument() // non-debug version is inline
  436. {
  437.     ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS($$DOC_CLASS$$)));
  438.     return ($$DOC_CLASS$$*)m_pDocument;
  439. }
  440. #endif //_DEBUG
  441. $$IF(CRecordView || CDaoRecordView)
  442.  
  443. /////////////////////////////////////////////////////////////////////////////
  444. // $$VIEW_CLASS$$ database support
  445. $$IF(CRecordView)
  446. CRecordset* $$VIEW_CLASS$$::OnGetRecordset()
  447. $$ELSE 
  448. CDaoRecordset* $$VIEW_CLASS$$::OnGetRecordset()
  449. $$ENDIF
  450. {
  451.     return m_pSet;
  452. }
  453.  
  454. $$ENDIF //CRecordView || CDaoRecordView
  455.  
  456. /////////////////////////////////////////////////////////////////////////////
  457. // $$VIEW_CLASS$$ message handlers
  458.