home *** CD-ROM | disk | FTP | other *** search
/ Using Visual C++ 4 (Special Edition) / Using_Visual_C_4_Special_Edition_QUE_1996.iso / ch09 / autocdoc.cpp next >
C/C++ Source or Header  |  1994-08-13  |  4KB  |  182 lines

  1. // autocdoc.cpp : implementation of the CClikDoc class
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "autoclik.h"
  6.  
  7. #include "autocdoc.h"
  8. #include "dialogs.h"
  9. #include "autocpnt.h"
  10.  
  11. #ifdef _DEBUG
  12. #undef THIS_FILE
  13. static char BASED_CODE THIS_FILE[] = __FILE__;
  14. #endif
  15.  
  16. /////////////////////////////////////////////////////////////////////////////
  17. // CClikDoc
  18.  
  19. IMPLEMENT_DYNCREATE(CClikDoc, CDocument)
  20.  
  21. BEGIN_MESSAGE_MAP(CClikDoc, CDocument)
  22.     //{{AFX_MSG_MAP(CClikDoc)
  23.     ON_COMMAND(ID_EDIT_CHANGETEXT, OnEditChangetext)
  24.     //}}AFX_MSG_MAP
  25. END_MESSAGE_MAP()
  26.  
  27. BEGIN_DISPATCH_MAP(CClikDoc, CDocument)
  28.     //{{AFX_DISPATCH_MAP(CClikDoc)
  29.     DISP_PROPERTY(CClikDoc, "text", m_str, VT_BSTR)
  30.     DISP_PROPERTY_EX(CClikDoc, "x", GetX, SetX, VT_I2)
  31.     DISP_PROPERTY_EX(CClikDoc, "y", GetY, SetY, VT_I2)
  32.     DISP_PROPERTY_EX(CClikDoc, "Position", GetPosition, SetPosition, VT_DISPATCH)
  33.     DISP_FUNCTION(CClikDoc, "RefreshWindow", Refresh, VT_EMPTY, VTS_NONE)
  34.     DISP_FUNCTION(CClikDoc, "SetAllProps", SetAllProps, VT_EMPTY, VTS_I2 VTS_I2 VTS_BSTR)
  35.     DISP_FUNCTION(CClikDoc, "ShowWindow", ShowWindow, VT_EMPTY, VTS_NONE)
  36.  
  37.     //}}AFX_DISPATCH_MAP
  38. END_DISPATCH_MAP()
  39.  
  40. /////////////////////////////////////////////////////////////////////////////
  41. // CClikDoc construction/destruction
  42.  
  43. CClikDoc::CClikDoc()
  44. {
  45.     EnableAutomation();
  46.  
  47.     m_pt = CPoint(10,10);
  48.     m_str = _T("Automation!");
  49.  
  50.     AfxOleLockApp();
  51. }
  52.  
  53. CClikDoc::~CClikDoc()
  54. {
  55.     AfxOleUnlockApp();
  56. }
  57.  
  58. BOOL CClikDoc::OnNewDocument()
  59. {
  60.     if (!CDocument::OnNewDocument())
  61.         return FALSE;
  62.  
  63.     // TODO: add reinitialization code here
  64.     // (SDI documents will reuse this document)
  65.  
  66.     return TRUE;
  67. }
  68.  
  69. void CClikDoc::Refresh()
  70. {
  71.     UpdateAllViews(NULL);
  72.     SetModifiedFlag();
  73. }
  74. /////////////////////////////////////////////////////////////////////////////
  75. // CClikDoc serialization
  76.  
  77. void CClikDoc::Serialize(CArchive& ar)
  78. {
  79.     if (ar.IsStoring())
  80.     {
  81.         ar << m_pt << m_str;
  82.     }
  83.     else
  84.     {
  85.         ar >> m_pt >> m_str;
  86.     }
  87. }
  88.  
  89. /////////////////////////////////////////////////////////////////////////////
  90. // CClikDoc diagnostics
  91.  
  92. #ifdef _DEBUG
  93. void CClikDoc::AssertValid() const
  94. {
  95.     CDocument::AssertValid();
  96. }
  97.  
  98. void CClikDoc::Dump(CDumpContext& dc) const
  99. {
  100.     CDocument::Dump(dc);
  101. }
  102. #endif //_DEBUG
  103.  
  104. /////////////////////////////////////////////////////////////////////////////
  105. // CClikDoc commands
  106.  
  107. void CClikDoc::OnEditChangetext()
  108. {
  109.     CChangeText dlg;
  110.     dlg.m_str = m_str;
  111.     if (dlg.DoModal())
  112.     {
  113.         m_str = dlg.m_str;
  114.         Refresh();
  115.     }
  116. }
  117.  
  118. short CClikDoc::GetX()
  119. {
  120.     return (short)m_pt.x;
  121. }
  122.  
  123. void CClikDoc::SetX(short nNewValue)
  124. {
  125.     m_pt.x = nNewValue;
  126.     Refresh();
  127. }
  128.  
  129. short CClikDoc::GetY()
  130. {
  131.     return (short)m_pt.y;
  132. }
  133.  
  134. void CClikDoc::SetY(short nNewValue)
  135. {
  136.     m_pt.y = nNewValue;
  137.     Refresh();
  138. }
  139.  
  140. void CClikDoc::SetAllProps(short x, short y, LPCTSTR text)
  141. {
  142.     m_pt.x = x;
  143.     m_pt.y = y;
  144.     m_str = text;
  145.     Refresh();
  146. }
  147.  
  148. void CClikDoc::ShowWindow()
  149. {
  150.     POSITION pos = GetFirstViewPosition();
  151.     CView* pView = GetNextView(pos);
  152.     if (pView != NULL)
  153.     {
  154.         CFrameWnd* pFrameWnd = pView->GetParentFrame();
  155.         pFrameWnd->ActivateFrame(SW_SHOW);
  156.         pFrameWnd = pFrameWnd->GetParentFrame();
  157.         if (pFrameWnd != NULL)
  158.             pFrameWnd->ActivateFrame(SW_SHOW);
  159.     }
  160. }
  161.  
  162. LPDISPATCH CClikDoc::GetPosition()
  163. {
  164.     CClikPoint* pPos = new CClikPoint;
  165.     pPos->m_x = (short)m_pt.x;
  166.     pPos->m_y = (short)m_pt.y;
  167.  
  168.     LPDISPATCH lpResult = pPos->GetIDispatch(FALSE);
  169.     return lpResult;
  170. }
  171.  
  172. void CClikDoc::SetPosition(LPDISPATCH newValue)
  173. {
  174.     CClikPoint* pPos = (CClikPoint*)CCmdTarget::FromIDispatch(newValue);
  175.     if (pPos != NULL && pPos->IsKindOf(RUNTIME_CLASS(CClikPoint)))
  176.     {
  177.         m_pt.x = pPos->m_x;
  178.         m_pt.y = pPos->m_y;
  179.         Refresh();
  180.     }
  181. }
  182.