mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1041 lines
24 KiB
1041 lines
24 KiB
//=============================================================================
|
|
// (c) Copyright Wang Laboratories, Inc. 1995 All rights reserved.
|
|
//-----------------------------------------------------------------------------
|
|
// Project: Norway - Image Viewer
|
|
//
|
|
// Component: Automation Application Object
|
|
//
|
|
// File Name: aapp.cpp
|
|
//
|
|
// Class: CAAppObj
|
|
//
|
|
// Functions:
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
// Maintenance Log:
|
|
/*
|
|
$Header: S:\products\wangview\norway\iedit95\aapp.cpv 1.37 11 Apr 1996 18:14:10 GMP $
|
|
$Log: S:\products\wangview\norway\iedit95\aapp.cpv $
|
|
|
|
Rev 1.37 11 Apr 1996 18:14:10 GMP
|
|
fixed memory leaks. CVariantHandlers were being created but not destroyed.
|
|
|
|
Rev 1.36 11 Mar 1996 10:36:32 GMP
|
|
allow edit mode changes after app is running in automation.
|
|
|
|
Rev 1.35 28 Nov 1995 09:50:32 JPRATT
|
|
changes AssertValid to ASSERT_VALID(this)
|
|
|
|
Rev 1.33 02 Nov 1995 12:20:48 LMACLENNAN
|
|
from VC++4.01
|
|
|
|
Rev 1.34 19 Oct 1995 15:12:58 JPRATT
|
|
fixed debug_new
|
|
|
|
Rev 1.33 19 Oct 1995 07:24:12 LMACLENNAN
|
|
DEBUG_NEW
|
|
|
|
Rev 1.32 09 Oct 1995 12:13:42 JPRATT
|
|
fixed typecast for VC++ 4.0
|
|
|
|
Rev 1.31 05 Oct 1995 14:48:40 JPRATT
|
|
fixed view mode bug for automation
|
|
|
|
Rev 1.30 04 Oct 1995 09:30:46 JPRATT
|
|
fixed insert page bug and changes annotationvisible property to
|
|
bool from variant
|
|
|
|
Rev 1.29 03 Oct 1995 11:50:22 JPRATT
|
|
fixed bug 4742 ImageView throwing errors when valid value set
|
|
|
|
Rev 1.28 25 Sep 1995 09:32:36 JPRATT
|
|
added error checking for invalid property values
|
|
|
|
Rev 1.27 14 Sep 1995 16:08:14 JPRATT
|
|
updated one page view to use zoom factor
|
|
|
|
Rev 1.26 14 Sep 1995 13:57:16 JPRATT
|
|
fixed edit mode bug to display correct menu and toolbar
|
|
|
|
Rev 1.25 22 Aug 1995 11:56:06 JPRATT
|
|
update automation name
|
|
|
|
Rev 1.24 21 Aug 1995 16:49:06 JPRATT
|
|
updated automation object name
|
|
|
|
Rev 1.23 18 Aug 1995 16:29:52 JPRATT
|
|
fixed bugs with getting ImageView, DisplayScale, ImagePallette properties
|
|
|
|
Rev 1.22 17 Aug 1995 09:49:20 JPRATT
|
|
updated with exception checking
|
|
|
|
Rev 1.21 17 Aug 1995 08:39:32 JPRATT
|
|
updated setedit
|
|
|
|
Rev 1.20 16 Aug 1995 14:33:46 JPRATT
|
|
added exception handling
|
|
|
|
Rev 1.19 08 Aug 1995 17:59:12 JPRATT
|
|
updated zoom property
|
|
|
|
Rev 1.18 03 Aug 1995 15:41:12 JPRATT
|
|
updates Edit property to set values correctly for Edit/View mode
|
|
|
|
Rev 1.17 01 Aug 1995 16:54:54 JPRATT
|
|
change OLE macro IMPLEMENT_OLECREATE to MY_IMPLEMENT_OLECREATE
|
|
to allow for multiple instances of automation
|
|
|
|
Rev 1.16 28 Jul 1995 13:30:50 JPRATT
|
|
No change.
|
|
|
|
Rev 1.15 27 Jul 1995 17:30:46 JPRATT
|
|
update exception errors to use new strings
|
|
|
|
Rev 1.14 20 Jul 1995 09:13:30 JPRATT
|
|
update Edit mode for View/Edit
|
|
|
|
Rev 1.12 10 Jul 1995 15:11:52 JPRATT
|
|
removed parameters from help
|
|
|
|
Rev 1.11 10 Jul 1995 09:35:56 JPRATT
|
|
updated statusbar,toolbar amd annotation bar
|
|
|
|
Rev 1.10 07 Jul 1995 13:30:02 JPRATT
|
|
updated viewimage and set mode to automation
|
|
|
|
Rev 1.9 06 Jul 1995 11:29:54 JPRATT
|
|
implemented app properties topwindow, height, width
|
|
|
|
Rev 1.8 30 Jun 1995 19:52:14 JPRATT
|
|
added member for saving document class
|
|
|
|
Rev 1.7 28 Jun 1995 13:24:58 JPRATT
|
|
add TopWindow Property
|
|
|
|
Rev 1.5 21 Jun 1995 08:13:44 JPRATT
|
|
completed automation object model
|
|
|
|
Rev 1.4 19 Jun 1995 07:43:14 JPRATT
|
|
updated image file class
|
|
|
|
Rev 1.3 14 Jun 1995 16:09:24 JPRATT
|
|
updated application property
|
|
|
|
Rev 1.2 14 Jun 1995 10:51:50 JPRATT
|
|
No change.
|
|
|
|
Rev 1.1 14 Jun 1995 07:55:18 JPRATT
|
|
added stubs for app class
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
// aapp.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "iedit.h"
|
|
#include "apage.h"
|
|
#include "apagerng.h"
|
|
#include "aimgfile.h"
|
|
#include "aapp.h"
|
|
#include "aetc.h"
|
|
#include "norvarnt.h"
|
|
#include "imagedit.h"
|
|
#include "items.h"
|
|
#include "image.h"
|
|
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char BASED_CODE THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
// private use of IMPLEMENT_OLECREATE macro
|
|
// to change RUNTIME_CLASS parameter from FALSE to TRUE to allow
|
|
// multiple instances of the application for each top level object created
|
|
|
|
#define MY_IMPLEMENT_OLECREATE(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
|
|
AFX_DATADEF COleObjectFactory class_name::factory(class_name::guid, \
|
|
RUNTIME_CLASS(class_name), TRUE, _T(external_name)); \
|
|
const AFX_DATADEF GUID class_name::guid = \
|
|
{ l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }; \
|
|
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CAAppObj
|
|
|
|
IMPLEMENT_DYNCREATE(CAAppObj, CCmdTarget)
|
|
|
|
#define new DEBUG_NEW
|
|
|
|
CAAppObj::CAAppObj()
|
|
{
|
|
EnableAutomation();
|
|
|
|
m_pActiveDoc = NULL;
|
|
m_pDoc = NULL;
|
|
m_bIsVisible = FALSE;
|
|
m_sDisplayScaleAlgorithm = NORMAL;
|
|
m_sImagePalette = CUSTOM_PALETTE;
|
|
m_fZoom = AUTODEFAULT_ZOOM;
|
|
m_sView = 0;
|
|
m_bAnnotationPaletteVisible = FALSE;
|
|
m_bEdit = TRUE;
|
|
m_bScrollBarsVisible = TRUE;
|
|
m_bStatusBarVisible = TRUE;
|
|
m_bToolBarVisible = TRUE;
|
|
m_bTopWindow = FALSE;
|
|
m_bIsDocOpen = FALSE;
|
|
m_sFitTo = 0;
|
|
m_Maximize = FALSE;
|
|
// To keep the application running as long as an OLE automation
|
|
// object is active, the constructor calls AfxOleLockApp.
|
|
|
|
AfxOleLockApp();
|
|
}
|
|
|
|
CAAppObj::~CAAppObj()
|
|
{
|
|
// To terminate the application when all objects created with
|
|
// with OLE automation, the destructor calls AfxOleUnlockApp.
|
|
|
|
AfxOleUnlockApp();
|
|
}
|
|
|
|
void CAAppObj::OnFinalRelease()
|
|
{
|
|
// When the last reference for an automation object is released
|
|
// OnFinalRelease is called. This implementation deletes the
|
|
// object. Add additional cleanup required for your object before
|
|
// deleting it from memory.
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
if (NULL != m_pActiveDoc)
|
|
delete m_pActiveDoc;
|
|
|
|
|
|
delete this;
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CAAppObj, CCmdTarget)
|
|
//{{AFX_MSG_MAP(CAAppObj)
|
|
// NOTE - the ClassWizard will add and remove mapping macros here.
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
BEGIN_DISPATCH_MAP(CAAppObj, CCmdTarget)
|
|
//{{AFX_DISPATCH_MAP(CAAppObj)
|
|
DISP_PROPERTY_EX(CAAppObj, "ActiveDocument", GetActiveDocument, SetNotSupported, VT_VARIANT)
|
|
DISP_PROPERTY_EX(CAAppObj, "Application", GetApplication, SetNotSupported, VT_VARIANT)
|
|
DISP_PROPERTY_EX(CAAppObj, "DisplayScaleAlgorithm", GetDisplayScaleAlgorithm, SetDisplayScaleAlgorithm, VT_I2)
|
|
DISP_PROPERTY_EX(CAAppObj, "Edit", GetEdit, SetEdit, VT_BOOL)
|
|
DISP_PROPERTY_EX(CAAppObj, "ImagePalette", GetImagePalette, SetImagePalette, VT_I2)
|
|
DISP_PROPERTY_EX(CAAppObj, "ImageView", GetImageView, SetImageView, VT_I2)
|
|
DISP_PROPERTY_EX(CAAppObj, "Parent", GetParent, SetNotSupported, VT_VARIANT)
|
|
DISP_PROPERTY_EX(CAAppObj, "ScrollBarsVisible", GetScrollBarsVisible, SetScrollBarsVisible, VT_BOOL)
|
|
DISP_PROPERTY_EX(CAAppObj, "StatusBarVisible", GetStatusBarVisible, SetStatusBarVisible, VT_BOOL)
|
|
DISP_PROPERTY_EX(CAAppObj, "ToolBarVisible", GetToolBarVisible, SetToolBarVisible, VT_BOOL)
|
|
DISP_PROPERTY_EX(CAAppObj, "Zoom", GetZoom, SetZoom, VT_R4)
|
|
DISP_PROPERTY_EX(CAAppObj, "Visible", GetVisible, SetNotSupported, VT_BOOL)
|
|
DISP_PROPERTY_EX(CAAppObj, "Height", GetHeight, SetHeight, VT_VARIANT)
|
|
DISP_PROPERTY_EX(CAAppObj, "Left", GetLeft, SetLeft, VT_VARIANT)
|
|
DISP_PROPERTY_EX(CAAppObj, "Top", GetTop, SetTop, VT_VARIANT)
|
|
DISP_PROPERTY_EX(CAAppObj, "Width", GetWidth, SetWidth, VT_VARIANT)
|
|
DISP_PROPERTY_EX(CAAppObj, "TopWindow", GetTopWindow, SetTopWindow, VT_BOOL)
|
|
DISP_PROPERTY_EX(CAAppObj, "FullName", GetFullName, SetNotSupported, VT_VARIANT)
|
|
DISP_PROPERTY_EX(CAAppObj, "Name", GetName, SetNotSupported, VT_VARIANT)
|
|
DISP_PROPERTY_EX(CAAppObj, "Path", GetPath, SetNotSupported, VT_VARIANT)
|
|
DISP_PROPERTY_EX(CAAppObj, "AnnotationPaletteVisible", GetAnnotationPaletteVisible, SetAnnotationPaletteVisible, VT_BOOL)
|
|
DISP_PROPERTY_EX(CAAppObj, "Maximize", GetMaximize, SetMaximize, VT_BOOL)
|
|
DISP_FUNCTION(CAAppObj, "CreateImageViewerObject", CreateImageViewerObject, VT_VARIANT, VTS_VARIANT)
|
|
DISP_FUNCTION(CAAppObj, "FitTo", FitTo, VT_VARIANT, VTS_I2)
|
|
DISP_FUNCTION(CAAppObj, "Quit", Quit, VT_VARIANT, VTS_NONE)
|
|
DISP_FUNCTION(CAAppObj, "Help", Help, VT_VARIANT, VTS_NONE)
|
|
//}}AFX_DISPATCH_MAP
|
|
END_DISPATCH_MAP()
|
|
|
|
MY_IMPLEMENT_OLECREATE(CAAppObj, "WangImage.Application", 0x7D252A20, 0xA4D5, 0x11CE, 0x8B, 0xF1, 0x0, 0x60, 0x8C, 0x54, 0xA1, 0xAA)
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CAAppObj message handlers
|
|
|
|
|
|
VARIANT CAAppObj::GetActiveDocument()
|
|
{
|
|
|
|
VARIANT va;
|
|
HRESULT hresult;
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
|
|
VariantInit(&va); // initialize to VT_EMPTY
|
|
|
|
if (NOERROR != (hresult = GetImageFileObjSetVar(this, &va)))
|
|
AfxThrowOleDispatchException((WORD)GetScode(hresult),
|
|
(UINT) IDS_DEAO_ACTIVEDOC_GET, (UINT) -1);
|
|
|
|
|
|
return va;
|
|
|
|
}
|
|
|
|
|
|
VARIANT CAAppObj::GetApplication()
|
|
{
|
|
|
|
|
|
VARIANT va;
|
|
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
VariantInit(&va); // initialize to VT_EMPTY
|
|
|
|
|
|
GetAppObjSetVar(this, &va);
|
|
|
|
|
|
return va;
|
|
|
|
}
|
|
|
|
short CAAppObj::GetDisplayScaleAlgorithm()
|
|
{
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
return m_sDisplayScaleAlgorithm;
|
|
}
|
|
|
|
void CAAppObj::SetDisplayScaleAlgorithm(short nNewValue)
|
|
{
|
|
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
|
|
switch (nNewValue)
|
|
{
|
|
case 0:
|
|
case 1:
|
|
case 2:
|
|
case 3:
|
|
case 4:
|
|
break;
|
|
default:
|
|
AfxThrowOleDispatchException((WORD) E_INVALIDARG,
|
|
(UINT) IDS_DEAO_INVALID_VALUE, (UINT) -1);
|
|
}
|
|
|
|
m_sDisplayScaleAlgorithm = nNewValue;
|
|
|
|
|
|
|
|
}
|
|
|
|
BOOL CAAppObj::GetEdit()
|
|
{
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
return m_bEdit;
|
|
}
|
|
|
|
void CAAppObj::SetEdit(BOOL bNewValue)
|
|
{
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
// This code should no longer be needed. We will leave it commented out
|
|
// for a while to make sure.
|
|
|
|
// if (m_bIsDocOpen) // if document already displayed reject set
|
|
// AfxThrowOleDispatchException((WORD) E_INVALIDARG,
|
|
// (UINT) IDS_E_CANTSET_VIEWEDIT_MODE, (UINT) -1);
|
|
|
|
m_bEdit = bNewValue;
|
|
// Edit mode can only be set before the mainframe window is created
|
|
// The edit mode of the app is set when the image is displayed
|
|
// when called in open
|
|
if (!m_bEdit)
|
|
theApp.SetViewMode(TRUE);
|
|
else
|
|
//use SwitchAppToEditMode to force change from view mode if file is
|
|
//read/write
|
|
// theApp.SetViewMode(FALSE);
|
|
theApp.SwitchAppToEditMode ();
|
|
|
|
}
|
|
|
|
|
|
VARIANT CAAppObj::GetFullName()
|
|
{
|
|
|
|
VARIANT va;
|
|
CString stFullName;
|
|
HRESULT hresult;
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
|
|
VariantInit(&va); // initialize to VT_EMPTY
|
|
|
|
if (NOERROR != (hresult = GetRegSvr32Name(stFullName, FILESPEC)))
|
|
{
|
|
SetAutoError((const SCODE) GetScode(hresult), (VARIANT * const) &va,
|
|
this);
|
|
AfxThrowOleDispatchException((WORD) GetScode(hresult),
|
|
(UINT) IDS_DEAO_FULLNAME_GET, (UINT) -1);
|
|
}
|
|
else
|
|
{
|
|
if (NOERROR != (hresult = SetBSTRVar((CString &) stFullName,
|
|
(VARIANT * const) &va, this)))
|
|
AfxThrowOleDispatchException((WORD) GetScode(hresult),
|
|
(UINT) IDS_DEAO_FULLNAME_GET, (UINT) -1);
|
|
|
|
}
|
|
|
|
return va;
|
|
|
|
}
|
|
|
|
|
|
short CAAppObj::GetImagePalette()
|
|
{
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
|
|
return m_sImagePalette;
|
|
}
|
|
|
|
void CAAppObj::SetImagePalette(short nNewValue)
|
|
{
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
switch (nNewValue)
|
|
{
|
|
case 0:
|
|
case 1:
|
|
case 2:
|
|
case 3:
|
|
case 4:
|
|
m_sImagePalette = nNewValue;
|
|
break;
|
|
default:
|
|
AfxThrowOleDispatchException((WORD) E_INVALIDARG,
|
|
(UINT) IDS_DEAO_INVALID_VALUE, (UINT) -1);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
short CAAppObj::GetImageView()
|
|
{
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
return m_sView;
|
|
}
|
|
|
|
void CAAppObj::SetImageView(short nNewValue)
|
|
{
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
switch (nNewValue)
|
|
{
|
|
case 0:
|
|
if (m_bIsDocOpen) // if document is displayed
|
|
{
|
|
theApp.m_pMainWnd->SendMessage(WM_COMMAND, ID_VIEW_ONEPAGE, 0);
|
|
// Sync the FitTo Zoom factor when switching to one page view
|
|
if (m_sFitTo != 0)
|
|
FitTo(m_sFitTo);
|
|
}
|
|
break;
|
|
case 1:
|
|
if (m_bIsDocOpen) // if document is displayed
|
|
{
|
|
theApp.m_pMainWnd->SendMessage(WM_COMMAND, ID_VIEW_THUMBNAILS, 0);
|
|
}
|
|
break;
|
|
case 2:
|
|
if (m_bIsDocOpen) // if document is displayed
|
|
{
|
|
theApp.m_pMainWnd->SendMessage(WM_COMMAND, ID_VIEW_PAGEANDTHUMBNAILS, 0);
|
|
// Sync the FitTo Zoom factor when switching to one page view
|
|
if (m_sFitTo != 0)
|
|
FitTo(m_sFitTo);
|
|
}
|
|
break;
|
|
default:
|
|
AfxThrowOleDispatchException((WORD) E_INVALIDARG,
|
|
(UINT) IDS_DEAO_INVALID_VALUE, (UINT) -1);
|
|
break;
|
|
}
|
|
|
|
m_sView = nNewValue;
|
|
}
|
|
|
|
|
|
VARIANT CAAppObj::GetParent()
|
|
{
|
|
|
|
VARIANT va;
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
GetAppObjSetVar(this, &va);
|
|
|
|
return va;
|
|
|
|
}
|
|
|
|
BOOL CAAppObj::GetScrollBarsVisible()
|
|
{
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
return m_bScrollBarsVisible;
|
|
}
|
|
|
|
void CAAppObj::SetScrollBarsVisible(BOOL bNewValue)
|
|
{
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
m_bScrollBarsVisible = bNewValue;
|
|
|
|
}
|
|
|
|
BOOL CAAppObj::GetStatusBarVisible()
|
|
{
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
return m_bStatusBarVisible;
|
|
}
|
|
|
|
void CAAppObj::SetStatusBarVisible(BOOL bNewValue)
|
|
{
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
if (m_bStatusBarVisible != bNewValue)
|
|
{
|
|
m_bStatusBarVisible = bNewValue;
|
|
|
|
if (m_bIsDocOpen) // if document is displayed
|
|
theApp.m_pMainWnd->SendMessage(WM_COMMAND, ID_VIEW_STATUS_BAR, 0);
|
|
}
|
|
}
|
|
|
|
BOOL CAAppObj::GetToolBarVisible()
|
|
{
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
return m_bToolBarVisible;
|
|
}
|
|
|
|
void CAAppObj::SetToolBarVisible(BOOL bNewValue)
|
|
{
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
if (m_bToolBarVisible != bNewValue)
|
|
{
|
|
m_bToolBarVisible = bNewValue;
|
|
|
|
if (m_bIsDocOpen) // if document is displayed
|
|
theApp.m_pMainWnd->SendMessage(WM_COMMAND, ID_VIEW_TOOLBAR, 0);
|
|
}
|
|
}
|
|
|
|
float CAAppObj::GetZoom()
|
|
{
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
return m_fZoom;
|
|
}
|
|
|
|
void CAAppObj::SetZoom(float newValue)
|
|
{
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
if (newValue < 1 || newValue > 6500)
|
|
AfxThrowOleDispatchException((WORD) E_INVALIDARG,
|
|
(UINT) IDS_DEAO_INVALID_VALUE, (UINT) -1);
|
|
|
|
m_fZoom = newValue;
|
|
//reset FitTo to 0 when zoom value set
|
|
m_sFitTo = 0;
|
|
}
|
|
|
|
VARIANT CAAppObj::CreateImageViewerObject(const VARIANT FAR& ObjectClass)
|
|
{
|
|
|
|
VARIANT va;
|
|
short iObjClass;
|
|
CVariantHandler * pVariant;
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
VariantInit(&va);
|
|
|
|
pVariant = new CVariantHandler;
|
|
pVariant->SetVariant(ObjectClass);
|
|
pVariant->GetShort(iObjClass, AUTODEFAULT_OBJCLASS, FALSE);
|
|
delete pVariant;
|
|
|
|
|
|
switch (iObjClass)
|
|
{
|
|
case OBJCLASS_IMGFILE: // Image File Object
|
|
{
|
|
if (NULL == m_pActiveDoc)
|
|
{
|
|
TRY
|
|
{
|
|
m_pActiveDoc = new CAImageFileObj(this);
|
|
}
|
|
CATCH (CMemoryException, e)
|
|
{
|
|
SetAutoError((const SCODE) E_OUTOFMEMORY,
|
|
(VARIANT * const) &va, this);
|
|
AfxThrowOleDispatchException((WORD) E_OUTOFMEMORY,
|
|
(UINT) IDS_DEAO_CREATEOBJECT,
|
|
(UINT) -1);
|
|
}
|
|
END_CATCH
|
|
|
|
HRESULT hresult;
|
|
// IDispatch ptr for obj
|
|
if (NOERROR != (hresult = GetImageFileObjSetVar(this, &va)))
|
|
AfxThrowOleDispatchException((WORD) GetScode(hresult),
|
|
(UINT) IDS_DEAO_CREATEOBJECT,
|
|
(UINT) -1);
|
|
}
|
|
else
|
|
{
|
|
SetAutoError((const SCODE) AUTO_E_IMGFILEOBJ_ALREADYEXISTS,
|
|
(VARIANT * const) &va, this);
|
|
AfxThrowOleDispatchException((WORD) AUTO_E_IMGFILEOBJ_ALREADYEXISTS,
|
|
(UINT) IDS_DEAO_CREATEOBJECT, (UINT) -1);
|
|
}
|
|
break;
|
|
}
|
|
|
|
case OBJCLASS_APP: // Another Application Object
|
|
{
|
|
CLSID clsid;
|
|
IDispatch FAR * pIDisp;
|
|
HRESULT hresult;
|
|
|
|
if (NOERROR !=
|
|
(hresult = CLSIDFromProgID( (LPCOLESTR) APPOBJ_REGNAME, &clsid)) ||
|
|
NOERROR !=
|
|
(hresult = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER,
|
|
IID_IDispatch,
|
|
(LPVOID FAR *) &pIDisp)))
|
|
{
|
|
SetAutoError((const SCODE) GetScode(hresult),
|
|
(VARIANT * const) &va, this);
|
|
AfxThrowOleDispatchException((WORD) GetScode(hresult),
|
|
(UINT) IDS_DEAO_CREATEOBJECT, (UINT) -1);
|
|
}
|
|
V_VT(&va) = VT_DISPATCH;
|
|
V_DISPATCH(&va) = pIDisp;
|
|
break;
|
|
}
|
|
|
|
default:
|
|
SetAutoError((const SCODE) E_INVALIDARG, (VARIANT * const) &va,
|
|
this);
|
|
AfxThrowOleDispatchException((WORD) E_INVALIDARG,
|
|
(UINT) IDS_DEAO_CREATEOBJECT, (UINT) -1);
|
|
break;
|
|
}
|
|
|
|
|
|
return va;
|
|
|
|
}
|
|
|
|
|
|
VARIANT CAAppObj::FitTo(short ZoomOption)
|
|
{
|
|
|
|
VARIANT va;
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
m_sFitTo = ZoomOption;
|
|
|
|
|
|
if (m_bIsDocOpen)
|
|
{
|
|
|
|
switch (m_sFitTo)
|
|
{
|
|
case 1:
|
|
theApp.m_pMainWnd->SendMessage(WM_COMMAND, ID_ZOOM_BESTFIT, 0);
|
|
break;
|
|
case 2:
|
|
theApp.m_pMainWnd->SendMessage(WM_COMMAND, ID_ZOOM_FITTOWIDTH, 0);
|
|
break;
|
|
case 3:
|
|
theApp.m_pMainWnd->SendMessage(WM_COMMAND, ID_ZOOM_FITTOHEIGHT, 0);
|
|
break;
|
|
case 4:
|
|
theApp.m_pMainWnd->SendMessage(WM_COMMAND, ID_ZOOM_ACTUALSIZE, 0);
|
|
break;
|
|
default:
|
|
AfxThrowOleDispatchException((WORD) E_INVALIDARG,
|
|
(UINT) IDS_DEAO_INVALID_VALUE, (UINT) -1);
|
|
break;
|
|
}
|
|
}
|
|
|
|
VariantInit(&va);
|
|
return va;
|
|
}
|
|
|
|
VARIANT CAAppObj::Help()
|
|
{
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
VARIANT va;
|
|
|
|
VariantInit(&va);
|
|
|
|
if (m_bIsVisible)
|
|
theApp.m_pMainWnd->SendMessage(WM_COMMAND, ID_HELP_INDEX, 0);
|
|
|
|
return va;
|
|
|
|
}
|
|
|
|
VARIANT CAAppObj::Quit()
|
|
{
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
VARIANT va;
|
|
|
|
VariantInit(&va);
|
|
|
|
theApp.m_pMainWnd->SendMessage(WM_CLOSE, 0, 0);
|
|
|
|
m_bIsDocOpen = FALSE;
|
|
|
|
return va;
|
|
|
|
|
|
}
|
|
|
|
BOOL CAAppObj::GetVisible()
|
|
{
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
return m_bIsVisible;
|
|
}
|
|
|
|
VARIANT CAAppObj::GetHeight()
|
|
{
|
|
VARIANT va;
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
VariantInit(&va);
|
|
|
|
V_VT(&va) = VT_I4;
|
|
V_I4(&va) = m_Bottom;
|
|
|
|
return va;
|
|
|
|
}
|
|
|
|
void CAAppObj::SetHeight(const VARIANT FAR& newValue)
|
|
{
|
|
|
|
VARIANT va;
|
|
|
|
CVariantHandler * pVariant;
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
VariantInit(&va);
|
|
|
|
pVariant = new CVariantHandler;
|
|
pVariant->SetVariant(newValue);
|
|
pVariant->GetLong(m_Bottom, 0, FALSE);
|
|
delete pVariant;
|
|
|
|
}
|
|
|
|
VARIANT CAAppObj::GetLeft()
|
|
{
|
|
|
|
VARIANT va;
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
VariantInit(&va);
|
|
|
|
V_VT(&va) = VT_I4;
|
|
V_I4(&va) = m_Left;
|
|
|
|
return va;
|
|
}
|
|
|
|
void CAAppObj::SetLeft(const VARIANT FAR& newValue)
|
|
{
|
|
|
|
VARIANT va;
|
|
|
|
CVariantHandler * pVariant;
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
VariantInit(&va);
|
|
|
|
pVariant = new CVariantHandler;
|
|
pVariant->SetVariant(newValue);
|
|
pVariant->GetLong(m_Left, 0, FALSE);
|
|
delete pVariant;
|
|
|
|
}
|
|
|
|
VARIANT CAAppObj::GetTop()
|
|
{
|
|
|
|
VARIANT va;
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
VariantInit(&va);
|
|
|
|
V_VT(&va) = VT_I4;
|
|
V_I4(&va) = m_Top;
|
|
|
|
return va;
|
|
|
|
}
|
|
|
|
void CAAppObj::SetTop(const VARIANT FAR& newValue)
|
|
{
|
|
|
|
VARIANT va;
|
|
|
|
CVariantHandler * pVariant;
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
VariantInit(&va);
|
|
|
|
pVariant = new CVariantHandler;
|
|
pVariant->SetVariant(newValue);
|
|
pVariant->GetLong(m_Top, 0, FALSE);
|
|
delete pVariant;
|
|
|
|
}
|
|
|
|
VARIANT CAAppObj::GetWidth()
|
|
{
|
|
|
|
VARIANT va;
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
VariantInit(&va);
|
|
|
|
V_VT(&va) = VT_I4;
|
|
V_I4(&va) = m_Right;
|
|
|
|
return va;
|
|
|
|
}
|
|
|
|
void CAAppObj::SetWidth(const VARIANT FAR& newValue)
|
|
{
|
|
|
|
VARIANT va;
|
|
|
|
CVariantHandler * pVariant;
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
VariantInit(&va);
|
|
|
|
pVariant = new CVariantHandler;
|
|
pVariant->SetVariant(newValue);
|
|
pVariant->GetLong(m_Right, 0, FALSE);
|
|
delete pVariant;
|
|
}
|
|
|
|
BOOL CAAppObj::GetTopWindow()
|
|
{
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
// if the window is visible check the style bit
|
|
// to dtermine the status of the app
|
|
if (m_bIsVisible)
|
|
{
|
|
if (theApp.m_pMainWnd->GetExStyle() & WS_EX_TOPMOST)
|
|
m_bTopWindow = TRUE;
|
|
else
|
|
m_bTopWindow = FALSE;
|
|
}
|
|
return m_bTopWindow;
|
|
}
|
|
|
|
void CAAppObj::SetTopWindow(BOOL bNewValue)
|
|
{
|
|
HWND wndTop;
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
m_bTopWindow = bNewValue;
|
|
|
|
switch (m_bTopWindow)
|
|
{
|
|
case FALSE:
|
|
default:
|
|
wndTop = HWND_NOTOPMOST;
|
|
if (m_bIsVisible)
|
|
if (theApp.m_pMainWnd->GetExStyle() & WS_EX_TOPMOST)
|
|
SetWindowPos(AfxGetMainWnd()->m_hWnd, wndTop, 0,0,0,0,SWP_NOSIZE | SWP_NOMOVE);
|
|
break;
|
|
case TRUE:
|
|
wndTop = HWND_TOPMOST;
|
|
if (m_bIsVisible)
|
|
SetWindowPos(AfxGetMainWnd()->m_hWnd, wndTop, 0,0,0,0,SWP_NOSIZE | SWP_NOMOVE);
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
//=============================================================================
|
|
//
|
|
// Property: Name
|
|
//
|
|
// Description: Name only of OLE server for application object. Get only.
|
|
// Throws OLE dispatch exception.
|
|
//
|
|
// Type: VT_BSTR
|
|
//
|
|
// Value: name string
|
|
//
|
|
//=============================================================================
|
|
|
|
VARIANT CAAppObj::GetName()
|
|
{
|
|
|
|
|
|
|
|
VARIANT va;
|
|
CString stName;
|
|
HRESULT hresult;
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
VariantInit(&va);
|
|
|
|
if (NOERROR != (hresult = GetRegSvr32Name(stName, NAME)))
|
|
{
|
|
SetAutoError((const SCODE) GetScode(hresult),(VARIANT * const) &va,
|
|
this);
|
|
AfxThrowOleDispatchException((WORD) GetScode(hresult),
|
|
(UINT) IDS_DEAO_FULLNAME_GET, (UINT) -1);
|
|
}
|
|
if (NOERROR != (hresult = SetBSTRVar((CString &) stName,
|
|
(VARIANT * const) &va, this)))
|
|
AfxThrowOleDispatchException((WORD) GetScode(hresult),
|
|
(UINT) IDS_DEAO_FULLNAME_GET, (UINT) -1);
|
|
|
|
|
|
return va;
|
|
}
|
|
|
|
|
|
VARIANT CAAppObj::GetPath()
|
|
{
|
|
|
|
VARIANT va;
|
|
CString stPath;
|
|
HRESULT hresult;
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
VariantInit(&va);
|
|
|
|
if (NOERROR != (hresult = GetRegSvr32Name(stPath, PATH)))
|
|
{
|
|
SetAutoError((const SCODE) GetScode(hresult), (VARIANT * const) &va,
|
|
this);
|
|
AfxThrowOleDispatchException((WORD) GetScode(hresult),
|
|
(UINT) IDS_DEAO_FULLNAME_GET, (UINT) -1);
|
|
}
|
|
else
|
|
{
|
|
if (NOERROR != (hresult = SetBSTRVar((CString &) stPath,
|
|
(VARIANT * const) &va, this)))
|
|
AfxThrowOleDispatchException((WORD) GetScode(hresult),
|
|
(UINT) IDS_DEAO_FULLNAME_GET, (UINT) -1);
|
|
}
|
|
|
|
|
|
return va;
|
|
|
|
}
|
|
|
|
BOOL CAAppObj::GetAnnotationPaletteVisible()
|
|
{
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
return m_bAnnotationPaletteVisible;
|
|
}
|
|
|
|
void CAAppObj::SetAnnotationPaletteVisible(BOOL bNewValue)
|
|
{
|
|
|
|
ASSERT_VALID(this); // Assert on "this"
|
|
|
|
|
|
if (m_bAnnotationPaletteVisible != bNewValue)
|
|
{
|
|
m_bAnnotationPaletteVisible = bNewValue;
|
|
|
|
if (m_bIsDocOpen) // if document is displayed
|
|
theApp.m_pMainWnd->SendMessage(WM_COMMAND, ID_ANNOTATION_SHOWANNOTATIONTOOLBOX, 0);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
BOOL CAAppObj::GetMaximize()
|
|
{
|
|
|
|
return m_Maximize;
|
|
}
|
|
|
|
void CAAppObj::SetMaximize(BOOL bNewValue)
|
|
{
|
|
m_Maximize = bNewValue;
|
|
|
|
if (m_bIsDocOpen) // if document is displayed
|
|
{
|
|
if (m_Maximize)
|
|
theApp.m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);
|
|
}
|
|
}
|