Microsoft™ Visual C++ OLE sample program
This program sample is provided on an as-is basis.
A licensee of the Content Manager OnDemand product is free to copy, revise, modify, and make derivative works of this program sample as they see fit.
#include "stdafx.h"
#include [winspool.h]
#include "vcole32.h"
#include "MainDlg.h"
#include "AttrsDlg.h"
static CMainDlg * pMainDlg;
#define COLOR_MAP struct _ColorMap
COLOR_MAP
{
short color;
char * pText;
};
static COLOR_MAP Colors[;]; =
{ { ARS_OLE_COLOR_BLACK, "Black" },
{ ARS_OLE_COLOR_WHITE, "White" },
{ ARS_OLE_COLOR_RED, "Red" },
{ ARS_OLE_COLOR_BLUE, "Blue" },
{ ARS_OLE_COLOR_GREEN, "Green" },
{ ARS_OLE_COLOR_YELLOW, "Yellow" },
{ ARS_OLE_COLOR_GRAY, "Gray" },
{ ARS_OLE_COLOR_CYAN, "Cyan" },
{ ARS_OLE_COLOR_MAGENTA, "Magenta" } };
#define NUM_COLORS ( sizeof(Colors) / sizeof(COLOR_MAP) )
#define ERROR_MAP struct _ErrorMap
ERROR_MAP
{
short code;
char * pMsg;
};
static ERROR_MAP Errors[;]; =
{ { ARS_OLE_RC_NO_MEMORY, "insufficient memory" },
{ ARS_OLE_RC_UNKNOWN_FOLDER, "unknown folder" },
{ ARS_OLE_RC_NO_FOLDERS_AVAILABLE, "no folders availble" },
{ ARS_OLE_RC_SERVER_ERROR, "server error" },
{ ARS_OLE_RC_FOLDER_ALREADY_OPEN, "folder already open" },
{ ARS_OLE_RC_NOT_LOGGED_ON, "not logged on" },
{ ARS_OLE_RC_ALREADY_LOGGED_ON, "already logged on" },
{ ARS_OLE_RC_INVALID_DIRECTORY, "invalid directory" },
{ ARS_OLE_RC_FOLDER_NOT_OPEN, "folder not open" },
{ ARS_OLE_RC_DOC_ALREADY_OPEN, "document already open" },
{ ARS_OLE_RC_DOC_NOT_OPEN, "no document is open" },
{ ARS_OLE_RC_OPEN_DOC_FAILED, "open doc failed" },
{ ARS_OLE_RC_UNAUTHORIZED_OPERATION, "unauthorized operation" },
{ ARS_OLE_RC_USER_CANCELLED, "user cancelled operation" },
{ ARS_OLE_RC_INVALID_INDEX, "invalid index" },
{ ARS_OLE_RC_INVALID_FIELD, "invalid field" },
{ ARS_OLE_RC_INVALID_OPERATOR, "invalid operator" },
{ ARS_OLE_RC_INVALID_MESSAGE_MODE, "invalid message mode" },
{ ARS_OLE_RC_INVALID_ZOOM_PERCENT, "invalid zoom percent" },
{ ARS_OLE_RC_DOC_CANNOT_HORZ_SCROLL, "cannot horz scroll" },
{ ARS_OLE_RC_INVALID_PAGE_NUMBER, "invalid page number" },
{ ARS_OLE_RC_INVALID_CONTROL_ID, "invalid other control" },
{ ARS_OLE_RC_INVALID_ROTATION, "invalid rotation" },
{ ARS_OLE_RC_NO_DOC_AVAILABLE, "no document for hit" },
{ ARS_OLE_RC_NOT_SUPPORTED, "not supported" },
{ ARS_OLE_RC_FILE_ERROR, "file error" },
{ ARS_OLE_RC_INVALID_COPIES, "invalid copies" },
{ ARS_OLE_RC_INVALID_ORIENTATION, "invalid orientation" },
{ ARS_OLE_RC_INVALID_PRINTER, "invalid printer" },
{ ARS_OLE_RC_INVALID_FIND_TYPE, "invalid find type" },
{ ARS_OLE_RC_ERROR_DURING_PRINT, "error during print" },
{ ARS_OLE_RC_INVALID_COLOR, "invalid color" } };
#define NUM_ERRORS ( sizeof(Errors) / sizeof(ERROR_MAP) )
BEGIN_MESSAGE_MAP(CMainDlg, CDialog)
//{{AFX_MSG_MAP(CMainDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_PRINT, OnPrint)
ON_LBN_DBLCLK(IDC_DOCLIST, OnDblclkDoclist)
ON_BN_CLICKED(IDC_CLOSE, OnCloseDlg)
ON_WM_HSCROLL()
ON_WM_VSCROLL()
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_ATTRIBUTES, OnSetDocAttrs)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BEGIN_EVENTSINK_MAP(CMainDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CMainDlg)
ON_EVENT(CMainDlg, IDC_ARSCTRL, 4, OnFolderSearchCompletedArsctrl, VTS_NONE)
ON_EVENT(CMainDlg, IDC_ARSCTRL, 3, OnDocOpenedArsctrl, VTS_NONE)
ON_EVENT(CMainDlg, IDC_ARSCTRL, 1, OnDocClosedArsctrl, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
CMainDlg::CMainDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMainDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMainDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
CMainDlg::CMainDlg()
{
}
void CMainDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMainDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
/////////////////////////////////////////////////////////////////////////////
// CMainDlg message handlers
BOOL CMainDlg::OnInitDialog()
{
VARIANT var;
short rc;
char Misc[1024;];
CArsOle * pArsCtrl;
int index;
pMainDlg = this;
m_DocOpened = FALSE;
( (CButton*)GetDlgItem( IDC_PRINT ) )->EnableWindow( FALSE );
( (CButton*)GetDlgItem( IDC_ATTRIBUTES ) )->EnableWindow( FALSE );
SetIcon(m_hIcon, FALSE);
pArsCtrl = (CArsOle*)GetDlgItem( IDC_ARSCTRL );
( (CScrollBar*)GetDlgItem( IDC_HORZ_SCROLLBAR ) )->SetScrollRange( 0, ARS_OLE_SCROLL_RANGE );
( (CScrollBar*)GetDlgItem( IDC_VERT_SCROLLBAR ) )->SetScrollRange( 0, ARS_OLE_SCROLL_RANGE );
( (CScrollBar*)GetDlgItem( IDC_HORZ_SCROLLBAR ) )->ShowScrollBar( FALSE );
( (CScrollBar*)GetDlgItem( IDC_VERT_SCROLLBAR ) )->ShowScrollBar( FALSE );
// Begin calling functions in the Content Manager OnDemand OLE control
rc = pArsCtrl->SetUserMessageMode( ARS_OLE_USER_MSG_MODE_SHOW );
if ( rc != ARS_OLE_RC_SUCCESS )
DisplayMsg( rc, "SetUserMessageMode" );
rc = pArsCtrl->Logon( "gunnar", "demo", " " );
if ( rc != ARS_OLE_RC_SUCCESS )
DisplayMsg( rc, "Logon" );
rc = pArsCtrl->OpenFolder( "Credit Card Statements" );
if ( rc != ARS_OLE_RC_SUCCESS )
{
DisplayMsg( rc, "OpenFolder" );
return FALSE;
}
rc = pArsCtrl->GetNumFolderDisplayFields( &var; );
if ( rc != ARS_OLE_RC_SUCCESS )
{
DisplayMsg( rc, "GetNumFolderDisplayFields" );
return FALSE;
}
m_NumDisplayFields = var.iVal;
rc = pArsCtrl->SearchFolder( FALSE );
if ( rc != ARS_OLE_RC_SUCCESS )
{
DisplayMsg( rc, "SearchFolder" );
return FALSE;
}
// Get the list of local printers
CComboBox * pPrintersList;
PRINTER_INFO_2 * pPrinterInfoArray;
DWORD size, num_printer_infos, printer_info_index, port_index;
char * pPortNames, * pIndividualPortName;
pPrintersList = (CComboBox*)GetDlgItem( IDC_PRINTERS );
EnumPrinters( PRINTER_ENUM_LOCAL |; PRINTER_ENUM_CONNECTIONS,
NULL, 2, NULL, 0, &size;, &num_printer_infos; );
pPrinterInfoArray = (PRINTER_INFO_2*)new char[; size ];
EnumPrinters( PRINTER_ENUM_LOCAL |; PRINTER_ENUM_CONNECTIONS,
NULL, 2, (BYTE*)pPrinterInfoArray, size, &size;, &num_printer_infos; );
if ( num_printer_infos > 0 )
{
for ( printer_info_index = 0;
printer_info_index < num_printer_infos; printer_info_index++ )
{
pPortNames =
new char[; strlen( pPrinterInfoArray[printer_info_index;].pPortName; ) + 1 ];
strcpy( pPortNames, pPrinterInfoArray[printer_info_index;].pPortName; );
for ( pIndividualPortName = strtok( pPortNames, "," ), port_index = 0;
pIndividualPortName != NULL;
pIndividualPortName = strtok( NULL, "," ), port_index++ )
{
strcpy( Misc, pPrinterInfoArray[printer_info_index;].pPrinterName; );
strcat( Misc, " on " );
strcat( Misc, pIndividualPortName );
index = pPrintersList->AddString( Misc );
}
delete pPortNames;
}
pPrintersList->SetCurSel( 0 );
}
delete [;]; pPrinterInfoArray;
return TRUE;
}
void CMainDlg::DisplayMsg( short rc, char * pMsg )
{
int j;
char Misc[1024;];
if ( rc == ARS_OLE_RC_SUCCESS )
AfxMessageBox( pMsg );
else
{
for ( j = 0; j < NUM_ERRORS; j++ )
if ( Errors[j;].code; == rc )
break;
sprintf( Misc, "%s returned '%s'.", pMsg, j < NUM_ERRORS
? Errors[j;].pMsg; : "***INVALID RETURN CODE***" );
AfxMessageBox( Misc );
}
}
void CMainDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
CDialog::OnSysCommand(nID, lParam);
}
void CMainDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(▭);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CMainDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CMainDlg::OnPrint()
{
CArsOle * pArsCtrl;
CListBox * pDocsList;
short rc;
char printer[100;];
pArsCtrl = (CArsOle*)GetDlgItem( IDC_ARSCTRL );
pDocsList = (CListBox*)GetDlgItem( IDC_DOCLIST );
GetDlgItem( IDC_PRINTERS )->GetWindowText( printer, sizeof(printer) );
rc = pArsCtrl->PrintDoc (-1, // the open doc
0, // entire document
printer,
1, // local printer (not server)
1, // # of copies
ARS_OLE_ORIENTATION_PORTRAIT,
.5, .5, .5, .5, // margins
0); // margins in inches
if ( rc != ARS_OLE_RC_SUCCESS )
{
DisplayMsg( rc, "PrintDoc" );
return;
}
}
void CMainDlg::OnDblclkDoclist()
{
CArsOle * pArsCtrl;
CListBox * pDocsList;
short index;
short rc;
char printer[100;];
pArsCtrl = (CArsOle*)GetDlgItem( IDC_ARSCTRL );
pDocsList = (CListBox*)GetDlgItem( IDC_DOCLIST );
if( m_DocOpened )
pArsCtrl->CloseDoc();
index = pDocsList->GetCurSel();
rc = pArsCtrl->OpenDoc( index, NULL, 0 );
if ( rc != ARS_OLE_RC_SUCCESS )
{
DisplayMsg( rc, "OpenDoc" );
return;
}
m_DocOpened = TRUE;
GetDlgItem( IDC_PRINTERS )->GetWindowText( printer, sizeof(printer) );
if( printer != NULL && printer[0;]; != '\0' )
( (CButton*)GetDlgItem( IDC_PRINT ) )->EnableWindow( TRUE );
( (CButton*)GetDlgItem( IDC_ATTRIBUTES ) )->EnableWindow( TRUE );
}
void CMainDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
VARIANT var;
CArsOle * pArsCtrl;
short rc;
pArsCtrl = (CArsOle*)GetDlgItem( IDC_ARSCTRL );
var.vt = VT_I2;
var.iVal = nPos;
rc = pArsCtrl->ScrollDocHorz( (short)nSBCode, &var; );
if ( rc != ARS_OLE_RC_SUCCESS )
DisplayMsg( rc, "ScrollDocHorz" );
else
pScrollBar->SetScrollPos( var.iVal );
}
void CMainDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
VARIANT var;
CArsOle * pArsCtrl;
short rc;
pArsCtrl = (CArsOle*)GetDlgItem( IDC_ARSCTRL );
var.vt = VT_I2;
var.iVal = nPos;
rc = pArsCtrl->ScrollDocVert( (short)nSBCode, &var; );
if ( rc != ARS_OLE_RC_SUCCESS )
DisplayMsg( rc, "ScrollDocVert" );
else
pScrollBar->SetScrollPos( var.iVal );
}
void CMainDlg::RefreshDocList( )
{
VARIANT var;
CArsOle * pArsCtrl;
ArsOleValue * pValues;
CListBox * pDocsList;
char temp[21;];
short rc;
long num_docs = 0, j;
pArsCtrl = (CArsOle*)GetDlgItem( IDC_ARSCTRL );
pDocsList = (CListBox*)GetDlgItem( IDC_DOCLIST );
if ( pArsCtrl == NULL |;|; pDocsList == NULL )
return;
rc = pArsCtrl->GetNumDocsInList( &var; );
if ( rc != ARS_OLE_RC_SUCCESS )
{
DisplayMsg( rc, "GetNumDocsInList" );
return;
}
num_docs = var.lVal;
pValues = new ArsOleValue[; max( m_NumDisplayFields, 1 ) ];
pDocsList->ResetContent( );
for ( j = 0; j < num_docs; j++ )
{
rc = pArsCtrl->GetDocDisplayValues( j, (IUnknown*)pValues, m_NumDisplayFields );
if ( rc != ARS_OLE_RC_SUCCESS )
{
DisplayMsg( rc, "GetDocDisplayValues" );
break;
}
sprintf( temp, "%s\t%s\t%s", pValues[0;];, pValues[3;];, pValues[2;]; );
pDocsList->InsertString( -1, temp );
}
pDocsList->SetCurSel( 0 );
delete [;]; pValues;
}
void CMainDlg::OnFolderSearchCompletedArsctrl()
{
RefreshDocList( );
}
void CMainDlg::OnDocOpenedArsctrl()
{
VARIANT var;
BOOL required;
CScrollBar * pHorz, * pVert;
CArsOle * pArsCtrl;
short rc;
pArsCtrl = (CArsOle*)GetDlgItem( IDC_ARSCTRL );
rc = pArsCtrl->GetDocNumPages( &var; );
if ( rc != ARS_OLE_RC_SUCCESS )
{
DisplayMsg( rc, "GetDocNumPages" );
return;
}
m_NumPages = var.lVal;
rc = pArsCtrl->IsDocHorzScrollRequired( &var; );
if ( rc != ARS_OLE_RC_SUCCESS )
{
DisplayMsg( rc, "IsDocHorzScrollRequired" );
return;
}
required = var.iVal;
m_CurrentPage = 1;
pHorz = (CScrollBar*)GetDlgItem( IDC_HORZ_SCROLLBAR );
pVert = (CScrollBar*)GetDlgItem( IDC_VERT_SCROLLBAR );
pHorz->ShowScrollBar( required );
pVert->ShowScrollBar( TRUE );
pHorz->SetScrollPos( 0 );
pVert->SetScrollPos( 0 );
}
void CMainDlg::OnDocClosedArsctrl()
{
CScrollBar * pBar;
pBar = (CScrollBar*)GetDlgItem( IDC_HORZ_SCROLLBAR );
if ( pBar != NULL )
pBar->ShowScrollBar( FALSE );
pBar = (CScrollBar*)GetDlgItem( IDC_VERT_SCROLLBAR );
if ( pBar != NULL )
pBar->ShowScrollBar( FALSE );
}
void CMainDlg::OnCloseDlg()
{
short rc;
CArsOle * pArsCtrl;
pArsCtrl = (CArsOle*)GetDlgItem( IDC_ARSCTRL );
if( m_DocOpened )
pArsCtrl->CloseDoc();
rc = pArsCtrl->CloseFolder( );
if ( rc != ARS_OLE_RC_SUCCESS )
DisplayMsg( rc, "CloseFolder" );
rc = pArsCtrl->Logoff( );
if ( rc != ARS_OLE_RC_SUCCESS )
DisplayMsg( rc, "Logoff" );
EndDialog(0);
}
void CMainDlg::OnSetDocAttrs()
{
CAttrsDlg dlg;
dlg.DoModal( );
}
/////////////////////////////////////////////////////////////////////////////
// CAttrsDlg dialog
CAttrsDlg::CAttrsDlg(CWnd* pParent /*=NULL*/)
: CDialog(CAttrsDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CAttrsDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CAttrsDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAttrsDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAttrsDlg, CDialog)
//{{AFX_MSG_MAP(CAttrsDlg)
ON_BN_CLICKED(IDC_BACK_COLOR, OnBackColor)
ON_BN_CLICKED(IDC_IMAGE_COLOR, OnImageColor)
ON_BN_CLICKED(IDC_ROTATION, OnRotation)
ON_BN_CLICKED(IDC_ZOOM, OnZoom)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAttrsDlg message handlers
BOOL CAttrsDlg::OnInitDialog()
{
CArsOle * pArsCtrl;
CListBox * pBackList, * pImageList;
CEdit * pZoom, * pRotation;
VARIANT var1, var2, var3;
BOOL chg;
short rc, j, back_color, image_color, zoom, rotation, min, max;
int index;
char data[10;];
pArsCtrl = (CArsOle*)pMainDlg->GetDlgItem( IDC_ARSCTRL );
pBackList = (CListBox*)GetDlgItem( IDC_BACK_COLORS );
pImageList = (CListBox*)GetDlgItem( IDC_IMAGE_COLORS );
pZoom = (CEdit*)GetDlgItem( IDC_ZOOMPCT );
pRotation = (CEdit*)GetDlgItem( IDC_ROT );
rc = pArsCtrl->GetDocBackgroundColor( &var1;, &var2; );
if ( rc != ARS_OLE_RC_SUCCESS )
{
pMainDlg->DisplayMsg( rc, "GetDocBackgroundColor" );
EndDialog( IDABORT );
return TRUE;
}
back_color = var1.iVal;
chg = var2.iVal;
rc = pArsCtrl->GetDocImageColor( &var1;, &var2; );
if ( rc != ARS_OLE_RC_SUCCESS )
{
pMainDlg->DisplayMsg( rc, "GetDocImageColor" );
EndDialog( IDABORT );
return TRUE;
}
image_color = var1.iVal;
chg = var2.iVal;
for ( j = 0; j < NUM_COLORS; j++ )
{
index = pBackList->AddString( Colors[j;].pText; );
pBackList->SetItemData( index, Colors[j;].color; );
if ( Colors[j;].color; == back_color )
pBackList->SetCurSel( index );
index = pImageList->AddString( Colors[j;].pText; );
pImageList->SetItemData( index, Colors[j;].color; );
if ( Colors[j;].color; == image_color )
pImageList->SetCurSel( index );
}
rc = pArsCtrl->GetDocZoom( &var1;, &var2;, &var3; );
if ( rc != ARS_OLE_RC_SUCCESS )
{
pMainDlg->DisplayMsg( rc, "GetDocZoom" );
EndDialog( IDABORT );
return TRUE;
}
zoom = var1.iVal;
min = var2.iVal;
max = var3.iVal;
sprintf( data, "%d", (int)zoom );
pZoom->SetWindowText( data );
rc = pArsCtrl->GetDocRotation( &var1;, &var2; );
if ( rc != ARS_OLE_RC_SUCCESS )
{
pMainDlg->DisplayMsg( rc, "GetDocRotation" );
EndDialog( IDABORT );
return TRUE;
}
rotation = var1.iVal;
chg = var2.iVal;
sprintf( data, "%d", (int)rotation );
pRotation->SetWindowText( data );
return TRUE;
}
void CAttrsDlg::OnBackColor()
{
CArsOle * pArsCtrl;
CListBox * pList;
VARIANT var1, var2;
BOOL chg;
short rc, j, color;
pArsCtrl = (CArsOle*)pMainDlg->GetDlgItem( IDC_ARSCTRL );
pList = (CListBox*)GetDlgItem( IDC_BACK_COLORS );
color = (short)pList->GetItemData( pList->GetCurSel( ) );
rc = pArsCtrl->SetDocBackgroundColor( color );
if ( rc != ARS_OLE_RC_SUCCESS )
{
pMainDlg->DisplayMsg( rc, "SetDocBackgroundColor" );
rc = pArsCtrl->GetDocBackgroundColor( &var1;, &var2; );
if ( rc != ARS_OLE_RC_SUCCESS )
pMainDlg->DisplayMsg( rc, "GetDocBackgroundColor" );
else
{
color = var1.iVal;
chg = var2.iVal;
for ( j = 0; j < NUM_COLORS; j++ )
{
if ( (short)pList->GetItemData(j) == color )
{
pList->SetCurSel(j);
break;
}
}
}
}
}
void CAttrsDlg::OnImageColor()
{
CArsOle * pArsCtrl;
CListBox * pList;
VARIANT var1, var2;
BOOL chg;
short rc, j, color;
pArsCtrl = (CArsOle*)pMainDlg->GetDlgItem( IDC_ARSCTRL );
pList = (CListBox*)GetDlgItem( IDC_IMAGE_COLORS );
color = (short)pList->GetItemData( pList->GetCurSel( ) );
rc = pArsCtrl->SetDocImageColor( color );
if ( rc != ARS_OLE_RC_SUCCESS )
{
pMainDlg->DisplayMsg( rc, "SetDocImageColor" );
rc = pArsCtrl->GetDocImageColor( &var1;, &var2; );
if ( rc != ARS_OLE_RC_SUCCESS )
pMainDlg->DisplayMsg( rc, "GetDocImageColor" );
else
{
color = var1.iVal;
chg = var2.iVal;
for ( j = 0; j < NUM_COLORS; j++ )
{
if ( (short)pList->GetItemData(j) == color )
{
pList->SetCurSel(j);
break;
}
}
}
}
}
void CAttrsDlg::OnRotation()
{
CArsOle * pArsCtrl;
CEdit * pRotation;
VARIANT var1, var2;
BOOL chg;
short rc, value;
char data[10;];
pArsCtrl = (CArsOle*)pMainDlg->GetDlgItem( IDC_ARSCTRL );
pRotation = (CEdit*)GetDlgItem( IDC_ROT );
pRotation->GetWindowText( data, sizeof(data) );
rc = pArsCtrl->SetDocRotation( (short)atoi( data ) );
if ( rc != ARS_OLE_RC_SUCCESS )
{
pMainDlg->DisplayMsg( rc, "SetDocRotation" );
rc = pArsCtrl->GetDocRotation( &var1;, &var2; );
if ( rc != ARS_OLE_RC_SUCCESS )
pMainDlg->DisplayMsg( rc, "GetDocRotation" );
else
{
value = var1.iVal;
chg = var2.iVal;
sprintf( data, "%d", (int)value );
pRotation->SetWindowText( data );
}
}
else
OnZoom();
}
void CAttrsDlg::OnZoom()
{
CArsOle * pArsCtrl;
CEdit * pZoom;
CScrollBar * pHorz, * pVert;
VARIANT var1, var2, var3;
BOOL required;
short rc, value, min, max, horz_pos, vert_pos;
char data[10;];
pArsCtrl = (CArsOle*)pMainDlg->GetDlgItem( IDC_ARSCTRL );
pZoom = (CEdit*)GetDlgItem( IDC_ZOOMPCT );
pZoom->GetWindowText( data, sizeof(data) );
rc = pArsCtrl->SetDocZoom( (short)atoi( data ), &var1;, &var2; );
horz_pos = var1.iVal;
vert_pos = var2.iVal;
if ( rc != ARS_OLE_RC_SUCCESS )
{
pMainDlg->DisplayMsg( rc, "SetDocZoom" );
rc = pArsCtrl->GetDocZoom( &var1;, &var2;, &var3; );
if ( rc != ARS_OLE_RC_SUCCESS )
pMainDlg->DisplayMsg( rc, "GetDocZoom" );
else
{
value = var1.iVal;
min = var2.iVal;
max = var3.iVal;
sprintf( data, "%d", (int)value );
pZoom->SetWindowText( data );
}
}
else
{
rc = pArsCtrl->IsDocHorzScrollRequired( &var1; );
if ( rc != ARS_OLE_RC_SUCCESS )
{
pMainDlg->DisplayMsg( rc, "IsDocHorzScrollRequired" );
return;
}
required = var1.iVal;
pHorz = (CScrollBar*)pMainDlg->GetDlgItem( IDC_HORZ_SCROLLBAR );
pVert = (CScrollBar*)pMainDlg->GetDlgItem( IDC_VERT_SCROLLBAR );
pHorz->ShowScrollBar( required );
pHorz->SetScrollPos( horz_pos );
pVert->SetScrollPos( vert_pos );
}
}