home *** CD-ROM | disk | FTP | other *** search
Wrap
/******************************************************************/ /* */ /* TurboCAD for Windows */ /* Copyright (c) 1993 - 2001 */ /* International Microcomputer Software, Inc. */ /* (IMSI) */ /* All rights reserved. */ /* */ /******************************************************************/ // PSsWizard.cpp : Implementation of CPSsWizard #include "stdafx.h" #include "TCPssWiz.h" #include "PSsWizard.h" #include "PaperSpaceWizard.h" #include "xdbtool_i.c" #include "imsigx_i.c" #include "gxmps_i.c" ///////////////////////////////////////////////////////////////////////////// // This example demostrate how to work with drawing's PaperSpaces collection // It just creates new PaperSpace with simply setting. // Modify this sample for your needs // CPSsWizard COleVariant t(-1L, VT_BOOL); COleVariant f(0L, VT_BOOL); COleVariant missing((long)DISP_E_PARAMNOTFOUND, VT_ERROR); ///////////////////////////////////////////////////////////////////////////// STDMETHODIMP CPSsWizard::get_ClassID(BSTR *pVal) { AFX_MANAGE_STATE(AfxGetStaticModuleState()) HRESULT hRes = E_FAIL; LPOLESTR olestr = NULL; try { if(SUCCEEDED( ::StringFromCLSID(CLSID_PSsWizard, &olestr))) { *pVal = ::SysAllocString(olestr); hRes = S_OK; } } catch (...) { TRACE_EXCEPTION("CPSsWizard::get_ClassID") } if (olestr != NULL) CoTaskMemFree(olestr); return hRes; } STDMETHODIMP CPSsWizard::get_Description(BSTR *pVal) { // Get the description from the resource HRESULT hRes = E_FAIL; CString strResult; if (strResult.LoadString(IDS_DESCRIPTION)) { *pVal = strResult.AllocSysString(); hRes = S_OK; } return hRes; } STDMETHODIMP CPSsWizard::GetToolInfo(VARIANT *CommandNames, VARIANT *MenuCaptions, VARIANT *StatusPrompts, VARIANT *ToolTips, VARIANT *Enabled, VARIANT *WantsUpdates, long *ret) { AFX_MANAGE_STATE(AfxGetStaticModuleState()) HRESULT hRes = E_FAIL; SAFEARRAYBOUND bound = {NUM_TOOLS,0}; SAFEARRAYBOUND bound1[2] = {{NUM_TOOLS, 0}, {2, 0}}; /* bound[0].cElements = NUM_TOOLS; bound[0].lLbound = 0; bound[1].cElements = 2; bound[1].lLbound = 0; */ CString cstrText; CString cstrTextTemp; BSTR bstrCommandName = NULL; BSTR bstrMenuCaption = NULL; BSTR bstrStatusPrompt = NULL; BSTR bstrToolTip = NULL; BOOL bEnabled = TRUE; BOOL bWantsUpdates = TRUE; long lIndicies = 0; long lIndicies1[2]; lIndicies1[0] = 0; lIndicies1[1] = 0; try { hRes = SafeArrayRedim(CommandNames->parray, &bound); CHECK_HRESULT(hRes) // hRes = SafeArrayRedim(MenuCaptions->parray, &bound); // CHECK_HRESULT(hRes) MenuCaptions->parray = SafeArrayCreate(VT_BSTR, 2, bound1); hRes = SafeArrayRedim(StatusPrompts->parray, &bound); CHECK_HRESULT(hRes) hRes = SafeArrayRedim(ToolTips->parray, &bound); CHECK_HRESULT(hRes) hRes = SafeArrayRedim(Enabled->parray, &bound); CHECK_HRESULT(hRes) hRes = SafeArrayRedim(WantsUpdates->parray, &bound); CHECK_HRESULT(hRes) cstrText.LoadString (IDS_MAINMENU); cstrText.Insert(cstrText.GetLength (), '|'); cstrTextTemp.LoadString (IDS_SUBMENU); cstrText.Insert(cstrText.GetLength (), cstrTextTemp); cstrText.Insert(cstrText.GetLength (), '|'); cstrTextTemp.LoadString (IDS_MENUCAPTION); cstrText.Insert(cstrText.GetLength (), cstrTextTemp); cstrTextTemp.Empty (); bstrCommandName = cstrText.AllocSysString(); hRes = SafeArrayPutElement(CommandNames->parray, &lIndicies, (void *)bstrCommandName); CHECK_HRESULT(hRes) cstrText.Empty (); cstrText.LoadString (IDS_MENUCAPTION); bstrMenuCaption = cstrText.AllocSysString(); hRes = SafeArrayPutElement(MenuCaptions->parray, lIndicies1, (void *)bstrMenuCaption); CHECK_HRESULT(hRes) cstrText.Empty (); cstrText.LoadString (IDS_PROMT0); bstrStatusPrompt = cstrText.AllocSysString(); hRes = SafeArrayPutElement(StatusPrompts->parray, &lIndicies, (void *)bstrStatusPrompt); CHECK_HRESULT(hRes) cstrText.Empty (); cstrText.LoadString (IDS_TOOLTIPS);; bstrToolTip = cstrText.AllocSysString(); hRes = SafeArrayPutElement(ToolTips->parray, &lIndicies, (void *)bstrToolTip); CHECK_HRESULT(hRes) hRes = SafeArrayPutElement(Enabled->parray, &lIndicies, (void *)&bEnabled); CHECK_HRESULT(hRes) hRes = SafeArrayPutElement(WantsUpdates->parray, &lIndicies, (void *)&bWantsUpdates); CHECK_HRESULT(hRes) // put default toolbar name lIndicies1[0] = 0; lIndicies1[1] = 1; cstrText.LoadString (IDS_TOOLBAR_NAME); bstrMenuCaption = cstrText.AllocSysString(); hRes = SafeArrayPutElement(MenuCaptions->parray, lIndicies1, (void *)bstrMenuCaption); CHECK_HRESULT(hRes) cstrText.Empty (); *ret = NUM_TOOLS; } catch (...) { if (SUCCEEDED(hRes)) hRes = E_FAIL; TRACE_EXCEPTION("CPSsWizard::GetToolInfo") } return hRes; } STDMETHODIMP CPSsWizard::GetPicture(VARIANT_BOOL LargeButtons, VARIANT_BOOL Monochrome, IDispatch **ret) { AFX_MANAGE_STATE(AfxGetStaticModuleState()) LPTSTR IDB = 0; HRESULT hRes = E_FAIL; try { if(LargeButtons) { IDB = MAKEINTRESOURCE(IDB_BMP2); } else { IDB = MAKEINTRESOURCE(IDB_BMP1); } HBITMAP pBmp = ::LoadBitmap(AfxGetResourceHandle(), IDB); PICTDESC pict; pict.cbSizeofstruct = sizeof(pict); pict.picType = PICTYPE_BITMAP; pict.bmp.hbitmap = pBmp; pict.bmp.hpal = NULL; hRes = OleCreatePictureIndirect(&pict, IID_IDispatch, TRUE, (void**)ret); CHECK_HRESULT(hRes) hRes = S_OK; } catch (...) { TRACE_EXCEPTION("CPSsWizard::GetPicture") } return hRes; } STDMETHODIMP CPSsWizard::CopyBitmap(VARIANT_BOOL LargeButtons, VARIANT_BOOL Monochrome, VARIANT_BOOL *ret) { AFX_MANAGE_STATE(AfxGetStaticModuleState()) // TODO: Add your implementation code here return S_OK; } STDMETHODIMP CPSsWizard::UpdateToolStatus(IDispatch *ThisTool, VARIANT_BOOL *Enabled, VARIANT_BOOL *Checked, VARIANT_BOOL *ret) { AFX_MANAGE_STATE(AfxGetStaticModuleState()) return S_OK; } STDMETHODIMP CPSsWizard::Initialize(IDispatch *ThisTool, VARIANT_BOOL *ret) { AFX_MANAGE_STATE(AfxGetStaticModuleState()) return S_OK; } STDMETHODIMP CPSsWizard::Terminate(IDispatch *ThisTool) { AFX_MANAGE_STATE(AfxGetStaticModuleState()) return S_OK; } STDMETHODIMP CPSsWizard::Run(IDispatch *ThisTool, VARIANT_BOOL *ret) { AFX_MANAGE_STATE(AfxGetStaticModuleState()) HRESULT hRes = E_FAIL; Tool *pTool = NULL; IApplication *pIApp = NULL; IDrawing *pDr = NULL; PageSetup *pPageSetup = NULL; long lPsscount = 0; PaperSpaces *pPss = NULL; PaperSpace *pPs = NULL; CString cstrText; BSTR bstrStatusPrompt; cstrText.LoadString (IDS_PROMT); bstrStatusPrompt = cstrText.AllocSysString(); IDispatch *pIDisp = NULL; PAPERSPACEINFO pPSInfo; IDispatch *pDisp = NULL; BSTR bstrPsName; try { hRes = ThisTool->QueryInterface(IID_Tool, (void **)&m_pTool); CHECK_HRESULT(hRes) hRes = m_pTool->get_Application(&m_pIApplication); CHECK_HRESULT(hRes) hRes = QueryInterface(IID_IPSsWizard, (void**)&m_pITool); CHECK_HRESULT(hRes) hRes = m_pIApplication->get_ActiveDrawing(&pDr); CHECK_HRESULT(hRes) hRes = pDr->get_PaperSpaces(&pIDisp); CHECK_HRESULT(hRes); hRes = pIDisp->QueryInterface (IID_PaperSpaces,(void**)&pPss); CHECK_HRESULT(hRes); RELEASE(pIDisp) hRes = pPss->get_Count(&lPsscount); CHECK_HRESULT(hRes) CString cstrTextTemp; char v[10]; memset(v, 0, 10); lPsscount++; _ltoa(lPsscount,v, 10); lPsscount--; CPaperSpaceWizard dlg(IDS_DESCRIPTION,NULL, 0); cstrText.LoadString (IDS_PSNAMETEMPLATE); cstrText.Insert((cstrText.GetLength ()), " "); cstrText.Insert((cstrText.GetLength ()), v); dlg.m_PSInfo = & pPSInfo; dlg.m_pPss = pPss; dlg.m_pPss->AddRef(); RELEASE(pPss) dlg.m_PSInfo->bPaperOrientation = 1; //PaperOrientation - Landscape by default dlg.m_PSInfo->cstrPSpaceName = cstrText; int iResponse = dlg.DoModal(); if (iResponse == ID_WIZFINISH) { bstrPsName = dlg.m_PSInfo->cstrPSpaceName.AllocSysString (); hRes = dlg.m_pPss->Add(bstrPsName, &pIDisp); CHECK_HRESULT(hRes) hRes = pIDisp->QueryInterface (IID_PaperSpace, (void**)&pPs); CHECK_HRESULT(hRes) hRes = pPs->Activate(); CHECK_HRESULT(hRes) RELEASE(pPs) RELEASE(dlg.m_pPss) hRes = pDr->get_PageSetup(&pPageSetup); CHECK_HRESULT(hRes) hRes = pPageSetup->put_SheetOrientation((ImsiOrientation)dlg.m_PSInfo->bPaperOrientation) ; CHECK_HRESULT(hRes) hRes = pPageSetup->put_PrinterOrientation((ImsiOrientation)dlg.m_PSInfo->bPaperOrientation) ; CHECK_HRESULT(hRes) RELEASE(pPageSetup) } } catch (...) { TRACE_EXCEPTION("CPSsWizard::Run") } RELEASE(pIDisp) RELEASE(pPageSetup) RELEASE(pPs) RELEASE(pDisp) RELEASE(pPss); RELEASE(pDr); RELEASE(m_pIApplication); return S_OK; } STDMETHODIMP CPSsWizard::MouseDown(IDispatch *WhichDrawing, IDispatch *WhichView, IDispatch *WhichWindow, short Button, long Shift, long X, long Y, VARIANT_BOOL *Cancel) { AFX_MANAGE_STATE(AfxGetStaticModuleState()) // TODO: Add your implementation code here return S_OK; } STDMETHODIMP CPSsWizard::MouseUp(IDispatch *WhichDrawing, IDispatch *WhichView, IDispatch *WhichWindow, short Button, long Shift, long X, long Y, VARIANT_BOOL *Cancel) { AFX_MANAGE_STATE(AfxGetStaticModuleState()) // TODO: Add your implementation code here return S_OK; } STDMETHODIMP CPSsWizard::MouseMove(IDispatch *WhichDrawing, IDispatch *WhichView, IDispatch *WhichWindow, long Shift, long X, long Y, VARIANT_BOOL *pbCancel) { AFX_MANAGE_STATE(AfxGetStaticModuleState()) // TODO: Add your implementation code here return S_OK; } STDMETHODIMP CPSsWizard::RunTool(IDispatch *ThisTool) { AFX_MANAGE_STATE(AfxGetStaticModuleState()) // TODO: Add your implementation code here return S_OK; } void CPSsWizard::ConnectEvents(IDispatch *ThisTool) { HRESULT hRes = S_OK; if (m_dwEventConnection != 0) return; try { DWORD dwEventMask = imsiEventMouseUp | imsiEventMouseMove | imsiEventMouseDown | imsiEventDrawingDeactivate | imsiEventRunTool | imsiEventBeforeExit; COleVariant var((long)dwEventMask); hRes = m_pIApplication->ConnectEvents(ThisTool, &var, (long*)&m_dwEventConnection); if (FAILED(hRes)) return; } catch (...) { TRACE_EXCEPTION("CPSsWizard::ConnectEvents") } } void CPSsWizard::DisconnectEvents() { if (m_pIApplication == NULL || m_dwEventConnection == 0) return; try { HRESULT hRes = m_pIApplication->DisconnectEvents(m_dwEventConnection); CHECK_HRESULT(hRes) if (FAILED(hRes)) return; m_dwEventConnection = 0; } catch (...) { TRACE_EXCEPTION("CPSsWizard::DisconnectEvents") } } void CPSsWizard::Destroy() { CString cstrT; cstrT.Empty (); BSTR bstrPromt = NULL; bstrPromt = cstrT.AllocSysString (); m_pIToolEvents->ToolChangePrompt(m_pITool,bstrPromt, FALSE); RELEASE(m_pIToolEvents) // DisconnectEvents(); RELEASE(m_pDragGraphic); RELEASE(m_pITool); RELEASE(m_pTool); RELEASE(m_pIApplication); }