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 >
Wrap
C/C++ Source or Header
|
1994-08-13
|
4KB
|
182 lines
// autocdoc.cpp : implementation of the CClikDoc class
//
#include "stdafx.h"
#include "autoclik.h"
#include "autocdoc.h"
#include "dialogs.h"
#include "autocpnt.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CClikDoc
IMPLEMENT_DYNCREATE(CClikDoc, CDocument)
BEGIN_MESSAGE_MAP(CClikDoc, CDocument)
//{{AFX_MSG_MAP(CClikDoc)
ON_COMMAND(ID_EDIT_CHANGETEXT, OnEditChangetext)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BEGIN_DISPATCH_MAP(CClikDoc, CDocument)
//{{AFX_DISPATCH_MAP(CClikDoc)
DISP_PROPERTY(CClikDoc, "text", m_str, VT_BSTR)
DISP_PROPERTY_EX(CClikDoc, "x", GetX, SetX, VT_I2)
DISP_PROPERTY_EX(CClikDoc, "y", GetY, SetY, VT_I2)
DISP_PROPERTY_EX(CClikDoc, "Position", GetPosition, SetPosition, VT_DISPATCH)
DISP_FUNCTION(CClikDoc, "RefreshWindow", Refresh, VT_EMPTY, VTS_NONE)
DISP_FUNCTION(CClikDoc, "SetAllProps", SetAllProps, VT_EMPTY, VTS_I2 VTS_I2 VTS_BSTR)
DISP_FUNCTION(CClikDoc, "ShowWindow", ShowWindow, VT_EMPTY, VTS_NONE)
//}}AFX_DISPATCH_MAP
END_DISPATCH_MAP()
/////////////////////////////////////////////////////////////////////////////
// CClikDoc construction/destruction
CClikDoc::CClikDoc()
{
EnableAutomation();
m_pt = CPoint(10,10);
m_str = _T("Automation!");
AfxOleLockApp();
}
CClikDoc::~CClikDoc()
{
AfxOleUnlockApp();
}
BOOL CClikDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
return TRUE;
}
void CClikDoc::Refresh()
{
UpdateAllViews(NULL);
SetModifiedFlag();
}
/////////////////////////////////////////////////////////////////////////////
// CClikDoc serialization
void CClikDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
ar << m_pt << m_str;
}
else
{
ar >> m_pt >> m_str;
}
}
/////////////////////////////////////////////////////////////////////////////
// CClikDoc diagnostics
#ifdef _DEBUG
void CClikDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CClikDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CClikDoc commands
void CClikDoc::OnEditChangetext()
{
CChangeText dlg;
dlg.m_str = m_str;
if (dlg.DoModal())
{
m_str = dlg.m_str;
Refresh();
}
}
short CClikDoc::GetX()
{
return (short)m_pt.x;
}
void CClikDoc::SetX(short nNewValue)
{
m_pt.x = nNewValue;
Refresh();
}
short CClikDoc::GetY()
{
return (short)m_pt.y;
}
void CClikDoc::SetY(short nNewValue)
{
m_pt.y = nNewValue;
Refresh();
}
void CClikDoc::SetAllProps(short x, short y, LPCTSTR text)
{
m_pt.x = x;
m_pt.y = y;
m_str = text;
Refresh();
}
void CClikDoc::ShowWindow()
{
POSITION pos = GetFirstViewPosition();
CView* pView = GetNextView(pos);
if (pView != NULL)
{
CFrameWnd* pFrameWnd = pView->GetParentFrame();
pFrameWnd->ActivateFrame(SW_SHOW);
pFrameWnd = pFrameWnd->GetParentFrame();
if (pFrameWnd != NULL)
pFrameWnd->ActivateFrame(SW_SHOW);
}
}
LPDISPATCH CClikDoc::GetPosition()
{
CClikPoint* pPos = new CClikPoint;
pPos->m_x = (short)m_pt.x;
pPos->m_y = (short)m_pt.y;
LPDISPATCH lpResult = pPos->GetIDispatch(FALSE);
return lpResult;
}
void CClikDoc::SetPosition(LPDISPATCH newValue)
{
CClikPoint* pPos = (CClikPoint*)CCmdTarget::FromIDispatch(newValue);
if (pPos != NULL && pPos->IsKindOf(RUNTIME_CLASS(CClikPoint)))
{
m_pt.x = pPos->m_x;
m_pt.y = pPos->m_y;
Refresh();
}
}