// OLEDBDlg.cpp : implementation file // #include "stdafx.h" #include "OLEDB.h" #include "OLEDBDlg.h" #include "_recordset.h" #include "fields.h" #include "field.h" #include "leadraster.h" #include "leadrasterview.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; ///////////////////////////////////////////////////////////////////////////// CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } ///////////////////////////////////////////////////////////////////////////// void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // COLEDBDlg dialog COLEDBDlg::COLEDBDlg(CWnd* pParent /*=NULL*/) : CDialog(COLEDBDlg::IDD, pParent) { //{{AFX_DATA_INIT(COLEDBDlg) //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_bValid = FALSE; m_nUserMode = ANN_USERMODE_DESIGN; } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(COLEDBDlg) DDX_Control(pDX, IDC_EDIT1, m_Text1); DDX_Control(pDX, IDC_EDIT2, m_Text2); DDX_Control(pDX, IDC_ADODC1, m_ADODC1); DDX_Control(pDX, IDC_LEADRASTEROLEDB1, m_LEADOLEDB1); /// DDX_Control(pDX, IDC_LEADRASTERDLG1, m_LEADDlg1); DDX_Control(pDX, IDC_LEADRASTERVIEW1, m_LEAD1); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(COLEDBDlg, CDialog) //{{AFX_MSG_MAP(COLEDBDlg) ON_WM_SYSCOMMAND() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_FLIP, OnFlip) ON_COMMAND(ID_EDIT_TOOL_AUDIO, OnEditToolAudio) ON_COMMAND(ID_EDIT_TOOL_BUTTON, OnEditToolButton) ON_COMMAND(ID_EDIT_TOOL_ELLIPSE, OnEditToolEllipse) ON_COMMAND(ID_EDIT_TOOL_FREEHAND, OnEditToolFreehand) ON_COMMAND(ID_EDIT_TOOL_HILITE, OnEditToolHilite) ON_COMMAND(ID_EDIT_TOOL_HOTSPOT, OnEditToolHotspot) ON_COMMAND(ID_EDIT_TOOL_LINE, OnEditToolLine) ON_COMMAND(ID_EDIT_TOOL_NOTE, OnEditToolNote) ON_COMMAND(ID_EDIT_TOOL_POINTER, OnEditToolPointer) ON_COMMAND(ID_EDIT_TOOL_POLYGON, OnEditToolPolygon) ON_COMMAND(ID_EDIT_TOOL_POLYLINE, OnEditToolPolyline) ON_COMMAND(ID_EDIT_TOOL_RECT, OnEditToolRect) ON_COMMAND(ID_EDIT_TOOL_REDACT, OnEditToolRedact) ON_COMMAND(ID_EDIT_TOOL_RULER, OnEditToolRuler) ON_COMMAND(ID_EDIT_TOOL_SELECT, OnEditToolSelect) ON_COMMAND(ID_EDIT_TOOL_STAMP, OnEditToolStamp) ON_COMMAND(ID_EDIT_TOOL_TEXT, OnEditToolText) ON_COMMAND(ID_EDIT_USERMODE_DESIGN, OnEditUsermodeDesign) ON_COMMAND(ID_EDIT_USERMODE_NONE, OnEditUsermodeNone) ON_COMMAND(ID_EDIT_USERMODE_RUN, OnEditUsermodeRun) ON_BN_CLICKED(IDC_ADDREC, OnAddrec) ON_BN_CLICKED(IDC_DELREC, OnDelrec) ON_BN_CLICKED(IDC_FINDREC, OnFindrec) ON_WM_DESTROY() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // COLEDBDlg message handlers void COLEDBDlg::Unlocksupport() { CLEADRaster LeadRaster = m_LEAD1.GetRaster(); UNLOCKSUPPORT(LeadRaster); } ///////////////////////////////////////////////////////////////////////////// HRESULT COLEDBDlg::CreateRasterObjectLic(ILEADRaster ** ppRaster) { HRESULT hr; *ppRaster = NULL; IClassFactory2 *pCF2 = NULL; hr = CoGetClassObject(CLSID_LEADRaster, CLSCTX_ALL, NULL, IID_IClassFactory2, (void**)&pCF2); if (!pCF2) return hr; IUnknown *pOuter = NULL; static const WCHAR BASED_CODE _szLicString[] =L"LEADTOOLS OCX Copyright (c) 1991-2004 LEAD Technologies, Inc."; BSTR pszLic = SysAllocString(_szLicString); hr = pCF2->CreateInstanceLic(pOuter, NULL, IID_IUnknown, pszLic, (void**)ppRaster); pCF2->Release(); SysFreeString(pszLic); return hr; } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::InitAnnotation() { m_LEAD1.SetScaleMode(SCALEMODE_PIXEL); m_pltAnn->PutAnnAutoDrawEnable (VARIANT_TRUE); IDispatch *pDispatch=NULL; (m_LEAD1.GetControlUnknown())->QueryInterface(IID_IDispatch, (void**)&pDispatch); m_pltAnn->PutAnnParentRasterView(pDispatch); if(pDispatch) pDispatch->Release(); m_pltAnn->PutAnnUserMode(ANN_USERMODE_RUN); m_pltAnn->PutAnnTool(ANN_TOOL_SELECT); m_pltAnn->PutAnnAutoMenuEnable(TRUE); } ///////////////////////////////////////////////////////////////////////////// BOOL COLEDBDlg::OnInitDialog() { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here m_bDataDirty = FALSE; m_bQuit = FALSE; m_pRaster = NULL; HRESULT hr = CreateRasterObjectLic(&m_pRaster); m_pRaster->PutEnableMethodErrors(FALSE); CoCreateInstance(CLSID_LEADRasterIO, NULL, CLSCTX_ALL, IID_ILEADRasterIO, (void**)&m_pRasterIO); CoCreateInstance(CLSID_LEADRasterProcess, NULL, CLSCTX_ALL, IID_ILEADRasterProcess, (void**)&m_pRasterProcess); CoCreateInstance(CLSID_LEADRasterAnnotation, NULL, CLSCTX_ALL, IID_ILEADRasterAnnotation, (void**)&m_pltAnn); m_pRasterIO->PutEnableMethodErrors(FALSE); m_pRasterProcess->PutEnableMethodErrors(FALSE); m_pltAnn->PutEnableMethodErrors(FALSE); //Instantiate the sink class and hold a pointer to it. m_pRasterAnnSink = new CLEADRasterAnnSink; m_pRasterAnnSink->m_pDlg = this; //Establish a connection between source and sink. LPUNKNOWN pUnkSink = m_pRasterAnnSink->GetIDispatch(FALSE); AfxConnectionAdvise(m_pltAnn, DIID__LEADRasterAnnotationEvents, pUnkSink, FALSE, &m_dwCookie); Unlocksupport(); hr = ::CoCreateInstance(CLSID_LEADRasterDlgKrn, NULL, CLSCTX_ALL, IID_ILEADRasterDlgKrn, (void**)&m_pRasterKrnDlg); if (FAILED (hr) || (m_pRasterKrnDlg == NULL)) { m_pRasterKrnDlg ->Release (); m_pRasterKrnDlg = NULL; } m_pRasterKrnDlg->InitDlg(INIT_WITH_COLOR); m_pRasterFileDlg = NULL; hr = ::CoCreateInstance(CLSID_LEADRasterDlgFile, NULL, CLSCTX_ALL, IID_ILEADRasterDlgFile, (void**)&m_pRasterFileDlg); if (FAILED (hr) || (m_pRasterFileDlg == NULL)) { m_pRasterFileDlg->Release (); m_pRasterFileDlg = NULL; } m_LEAD1.SetPaintSizeMode(3); m_LEAD1.SetAutoScroll(FALSE); m_LEAD1.SetAutoRepaint(TRUE); m_LEAD1.SetBackErase(FALSE); InitAnnotation(); /* first, create a dummy image so the main control will have a valid BITMAPHANDLE and we can avoid doing an expensive copy after loading from the database now, assign that BITMAPHANDLE to the OLEDB control so it can refrence it directly */ m_LEADOLEDB1.SetRaster((ILEADRaster *)m_LEAD1.GetRaster().m_lpDispatch); // databind performed at design-time, except for the data field m_LEADOLEDB1.SetDataField(TEXT("photo")); m_bValid = TRUE; m_bDeleted = FALSE; //Set the data properties on the LEADRaster OLE DB control m_LEADOLEDB1.SetDataLoadBits(0); m_LEADOLEDB1.SetDataSaveBits(24); m_LEADOLEDB1.SetDataSaveFormat(FILE_LEAD); m_LEADOLEDB1.SetDataSaveQuality(QFACTOR_QMS); //manually update the text control with the data from the text field C_Recordset recset; recset = m_ADODC1.GetRecordset(); VARIANT vax; VariantInit(&vax); VARIANT vaval; VariantInit(&vaval); CFields Fields; CField cwho; Fields = recset.GetFields(); vax.vt = VT_I4; vax.lVal = 0; cwho = Fields.GetItem(vax); vaval = cwho.GetValue(); CString csText(vaval.bstrVal); SysFreeString(vaval.bstrVal); m_Text1.SetWindowText(csText); return TRUE; // return TRUE unless you set the focus to a control } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } /* If you add a minimize button to your dialog, you will need the code below to draw the icon. For MFC applications using the document/view model, this is automatically done for you by the framework. */ ///////////////////////////////////////////////////////////////////////////// // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR COLEDBDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void COLEDBDlg::OnFlip() { //Flip the image m_pRasterProcess->Flip(m_LEAD1.GetRaster()); m_bDataDirty = TRUE; m_LEAD1.ForceRepaint(); } BEGIN_EVENTSINK_MAP(COLEDBDlg, CDialog) //{{AFX_EVENTSINK_MAP(COLEDBDlg) ON_EVENT(COLEDBDlg, IDC_ADODC1, 200 /* WillMove */, OnWillMoveAdodc1, VTS_I4 VTS_PI4 VTS_DISPATCH) ON_EVENT(COLEDBDlg, IDC_ADODC1, 201 /* MoveComplete */, OnMoveCompleteAdodc1, VTS_I4 VTS_DISPATCH VTS_PI4 VTS_DISPATCH) ON_EVENT(COLEDBDlg, IDC_ADODC1, 211 /* Error */, OnErrorAdodc1, VTS_I4 VTS_PBSTR VTS_I4 VTS_BSTR VTS_BSTR VTS_I4 VTS_PBOOL) ON_EVENT(COLEDBDlg, IDC_LEADRASTERVIEW1, 6 /* Click */, OnClickLeadrasterview1, VTS_NONE) ON_EVENT(COLEDBDlg, IDC_LEADRASTEROLEDB1, 1 /* DataLoaded */, OnDataLoadedLeadrasteroledb1, VTS_I2) ON_EVENT(COLEDBDlg, IDC_LEADRASTEROLEDB1, 2 /* DataSaved */, OnDataSavedLeadrasteroledb1, VTS_I2) ON_EVENT(COLEDBDlg, IDC_LEADRASTEROLEDB1, 3 /* ProgressStatus */, OnProgressStatusLeadrasteroledb1, VTS_I2) //}}AFX_EVENTSINK_MAP END_EVENTSINK_MAP() ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnWillMoveAdodc1(long adReason, long FAR* adStatus, LPDISPATCH pRecordset) { if(m_bValid) // if the dialog has not been fully created yet, skip this { //clear the existing ann objects m_LEADOLEDB1.SetAnnContainer(0); m_bQuit = FALSE; m_LEADOLEDB1.SetEnableProgressEvent(TRUE); if (m_LEAD1.GetRaster().GetBitmap() > 0) { if(m_LEAD1.GetRaster().GetBitmapBits() == 1) { m_LEADOLEDB1.SetDataSaveBits(1); m_LEADOLEDB1.SetDataSaveFormat(FILE_LEAD1BIT); m_LEADOLEDB1.SetDataSaveQuality(0); } else { m_LEADOLEDB1.SetDataSaveBits(24); m_LEADOLEDB1.SetDataSaveFormat(FILE_LEAD); m_LEADOLEDB1.SetDataSaveQuality(QFACTOR_QMS); } } if(m_bDataDirty) { // Assign the ann objects to be saved m_LEADOLEDB1.SetAnnContainer(m_pltAnn->GetAnnContainer()); m_LEADOLEDB1.SetDataDirty(m_bDataDirty); } else m_pltAnn->PutAnnContainer(0); //free existing ann objects } } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnMoveCompleteAdodc1(long adReason, LPDISPATCH pError, long FAR* adStatus, LPDISPATCH pRecordset) { if (m_bValid) { m_bDataDirty = FALSE; //manually update the text control with the data from the text field C_Recordset recset; recset = m_ADODC1.GetRecordset(); VARIANT vax; VariantInit(&vax); VARIANT vaval; VariantInit(&vaval); CFields Fields; CField cwho; Fields = recset.GetFields(); vax.vt = VT_I4; vax.lVal = 0; if (!m_bDeleted) { cwho = Fields.GetItem(vax); vaval = cwho.GetValue(); CString csText(vaval.bstrVal); SysFreeString(vaval.bstrVal); m_Text1.SetWindowText(csText); } else { CString csText(""); m_Text1.SetWindowText(csText); } } } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::HandleAnnDrawn(long hAnnObject) { m_pltAnn->PutAnnTool(ANN_TOOL_SELECT); m_bDataDirty = TRUE; } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnEditToolAudio() { CMenu* pMenu = GetMenu(); if (pMenu) { for (int x=ID_EDIT_TOOL_SELECT;x<=ID_EDIT_TOOL_RULER;x++) pMenu->CheckMenuItem(x, MF_BYCOMMAND|MF_UNCHECKED); pMenu->CheckMenuItem(ID_EDIT_TOOL_AUDIO, MF_BYCOMMAND|MF_CHECKED); } m_pltAnn->PutAnnTool(ANN_TOOL_AUDIO); } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnEditToolButton() { CMenu* pMenu = GetMenu(); if (pMenu) { for (int x=ID_EDIT_TOOL_SELECT;x<=ID_EDIT_TOOL_RULER;x++) pMenu->CheckMenuItem(x, MF_BYCOMMAND|MF_UNCHECKED); pMenu->CheckMenuItem(ID_EDIT_TOOL_BUTTON, MF_BYCOMMAND|MF_CHECKED); } m_pltAnn->PutAnnTool(ANN_TOOL_BUTTON); } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnEditToolEllipse() { CMenu* pMenu = GetMenu(); if (pMenu) { for(int x=ID_EDIT_TOOL_SELECT;x<=ID_EDIT_TOOL_RULER;x++) pMenu->CheckMenuItem(x, MF_BYCOMMAND|MF_UNCHECKED); pMenu->CheckMenuItem(ID_EDIT_TOOL_ELLIPSE, MF_BYCOMMAND|MF_CHECKED); } m_pltAnn->PutAnnTool(ANN_TOOL_ELLIPSE); } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnEditToolFreehand() { CMenu* pMenu = GetMenu(); if (pMenu) { for(int x=ID_EDIT_TOOL_SELECT;x<=ID_EDIT_TOOL_RULER;x++) pMenu->CheckMenuItem(x, MF_BYCOMMAND|MF_UNCHECKED); pMenu->CheckMenuItem(ID_EDIT_TOOL_FREEHAND, MF_BYCOMMAND|MF_CHECKED); } m_pltAnn->PutAnnTool(ANN_TOOL_FREEHAND); } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnEditToolHilite() { CMenu* pMenu = GetMenu(); if (pMenu) { for(int x=ID_EDIT_TOOL_SELECT;x<=ID_EDIT_TOOL_RULER;x++) pMenu->CheckMenuItem(x, MF_BYCOMMAND|MF_UNCHECKED); pMenu->CheckMenuItem(ID_EDIT_TOOL_HILITE, MF_BYCOMMAND|MF_CHECKED); } m_pltAnn->PutAnnTool(ANN_TOOL_HILITE); } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnEditToolHotspot() { CMenu* pMenu = GetMenu(); if (pMenu) { for(int x=ID_EDIT_TOOL_SELECT;x<=ID_EDIT_TOOL_RULER;x++) pMenu->CheckMenuItem(x, MF_BYCOMMAND|MF_UNCHECKED); pMenu->CheckMenuItem(ID_EDIT_TOOL_HOTSPOT, MF_BYCOMMAND|MF_CHECKED); } m_pltAnn->PutAnnTool(ANN_TOOL_HOTSPOT); } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnEditToolLine() { CMenu* pMenu = GetMenu(); if (pMenu) { for(int x=ID_EDIT_TOOL_SELECT;x<=ID_EDIT_TOOL_RULER;x++) pMenu->CheckMenuItem(x, MF_BYCOMMAND|MF_UNCHECKED); pMenu->CheckMenuItem(ID_EDIT_TOOL_LINE, MF_BYCOMMAND|MF_CHECKED); } m_pltAnn->PutAnnTool(ANN_TOOL_LINE); } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnEditToolNote() { CMenu* pMenu = GetMenu(); if (pMenu) { for(int x=ID_EDIT_TOOL_SELECT;x<=ID_EDIT_TOOL_RULER;x++) pMenu->CheckMenuItem(x, MF_BYCOMMAND|MF_UNCHECKED); pMenu->CheckMenuItem(ID_EDIT_TOOL_NOTE, MF_BYCOMMAND|MF_CHECKED); } m_pltAnn->PutAnnTool(ANN_TOOL_NOTE); } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnEditToolPointer() { CMenu* pMenu = GetMenu(); if (pMenu) { for(int x=ID_EDIT_TOOL_SELECT;x<=ID_EDIT_TOOL_RULER;x++) pMenu->CheckMenuItem(x, MF_BYCOMMAND|MF_UNCHECKED); pMenu->CheckMenuItem(ID_EDIT_TOOL_POINTER, MF_BYCOMMAND|MF_CHECKED); } m_pltAnn->PutAnnTool(ANN_TOOL_POINTER); } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnEditToolPolygon() { CMenu* pMenu = GetMenu(); if (pMenu) { for(int x=ID_EDIT_TOOL_SELECT;x<=ID_EDIT_TOOL_RULER;x++) pMenu->CheckMenuItem(x, MF_BYCOMMAND|MF_UNCHECKED); pMenu->CheckMenuItem(ID_EDIT_TOOL_POLYGON, MF_BYCOMMAND|MF_CHECKED); } m_pltAnn->PutAnnTool(ANN_TOOL_POLYGON); } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnEditToolPolyline() { CMenu* pMenu = GetMenu(); if (pMenu) { for(int x=ID_EDIT_TOOL_SELECT;x<=ID_EDIT_TOOL_RULER;x++) pMenu->CheckMenuItem(x, MF_BYCOMMAND|MF_UNCHECKED); pMenu->CheckMenuItem(ID_EDIT_TOOL_POLYLINE, MF_BYCOMMAND|MF_CHECKED); } m_pltAnn->PutAnnTool(ANN_TOOL_POLYLINE); } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnEditToolRect() { CMenu* pMenu = GetMenu(); if (pMenu) { for(int x=ID_EDIT_TOOL_SELECT;x<=ID_EDIT_TOOL_RULER;x++) pMenu->CheckMenuItem(x, MF_BYCOMMAND|MF_UNCHECKED); pMenu->CheckMenuItem(ID_EDIT_TOOL_RECT, MF_BYCOMMAND|MF_CHECKED); } m_pltAnn->PutAnnTool(ANN_TOOL_RECT); } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnEditToolRedact() { CMenu* pMenu = GetMenu(); if (pMenu) { for(int x=ID_EDIT_TOOL_SELECT;x<=ID_EDIT_TOOL_RULER;x++) pMenu->CheckMenuItem(x, MF_BYCOMMAND|MF_UNCHECKED); pMenu->CheckMenuItem(ID_EDIT_TOOL_REDACT, MF_BYCOMMAND|MF_CHECKED); } m_pltAnn->PutAnnTool(ANN_TOOL_REDACT); } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnEditToolRuler() { CMenu* pMenu = GetMenu(); if (pMenu) { for(int x=ID_EDIT_TOOL_SELECT;x<=ID_EDIT_TOOL_RULER;x++) pMenu->CheckMenuItem(x, MF_BYCOMMAND|MF_UNCHECKED); pMenu->CheckMenuItem(ID_EDIT_TOOL_RULER, MF_BYCOMMAND|MF_CHECKED); } m_pltAnn->PutAnnTool(ANN_TOOL_RULER); } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnEditToolSelect() { CMenu* pMenu = GetMenu(); if (pMenu) { for(int x=ID_EDIT_TOOL_SELECT;x<=ID_EDIT_TOOL_RULER;x++) pMenu->CheckMenuItem(x, MF_BYCOMMAND|MF_UNCHECKED); pMenu->CheckMenuItem(ID_EDIT_TOOL_SELECT, MF_BYCOMMAND|MF_CHECKED); } m_pltAnn->PutAnnTool(ANN_TOOL_SELECT); } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnEditToolStamp() { CMenu* pMenu = GetMenu(); if (pMenu) { for(int x=ID_EDIT_TOOL_SELECT;x<=ID_EDIT_TOOL_RULER;x++) pMenu->CheckMenuItem(x, MF_BYCOMMAND|MF_UNCHECKED); pMenu->CheckMenuItem(ID_EDIT_TOOL_STAMP, MF_BYCOMMAND|MF_CHECKED); } m_pltAnn->PutAnnTool(ANN_TOOL_STAMP); } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnEditToolText() { CMenu* pMenu = GetMenu(); if (pMenu) { for(int x=ID_EDIT_TOOL_SELECT;x<=ID_EDIT_TOOL_RULER;x++) pMenu->CheckMenuItem(x, MF_BYCOMMAND|MF_UNCHECKED); pMenu->CheckMenuItem(ID_EDIT_TOOL_TEXT, MF_BYCOMMAND|MF_CHECKED); } m_pltAnn->PutAnnTool(ANN_TOOL_TEXT); } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnEditUsermodeDesign() { CMenu* pMenu = GetMenu(); if (pMenu) { for(int x=ID_EDIT_USERMODE_NONE;x<=ID_EDIT_USERMODE_RUN;x++) pMenu->CheckMenuItem(x, MF_BYCOMMAND|MF_UNCHECKED); pMenu->CheckMenuItem(ID_EDIT_USERMODE_DESIGN, MF_BYCOMMAND|MF_CHECKED); } m_pltAnn->PutAnnUserMode (ANN_USERMODE_DESIGN); m_nUserMode = ANN_USERMODE_DESIGN; } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnEditUsermodeNone() { CMenu* pMenu = GetMenu(); if (pMenu) { for(int x=ID_EDIT_USERMODE_NONE;x<=ID_EDIT_USERMODE_RUN;x++) pMenu->CheckMenuItem(x, MF_BYCOMMAND|MF_UNCHECKED); pMenu->CheckMenuItem(ID_EDIT_USERMODE_NONE, MF_BYCOMMAND|MF_CHECKED); } m_pltAnn->PutAnnUserMode (ANN_USERMODE_NONE); m_nUserMode = ANN_USERMODE_NONE; } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnEditUsermodeRun() { CMenu* pMenu = GetMenu(); if (pMenu) { for(int x=ID_EDIT_USERMODE_NONE;x<=ID_EDIT_USERMODE_RUN;x++) pMenu->CheckMenuItem(x, MF_BYCOMMAND|MF_UNCHECKED); pMenu->CheckMenuItem(ID_EDIT_USERMODE_RUN, MF_BYCOMMAND|MF_CHECKED); } m_pltAnn->PutAnnUserMode (ANN_USERMODE_RUN); m_nUserMode = ANN_USERMODE_RUN; } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnAddrec() { VARIANT va1; VARIANT va2; C_Recordset recset; CString csSearch; int nRet; int nPage; CString strFileName = ""; RECT rcWin; BSTR strFile; ::SetRect(&rcWin, 0, 0, 1, 1); m_pRasterFileDlg->PutEnableMethodErrors(FALSE); m_pRasterFileDlg->PutFilter(""); m_pRasterFileDlg->PutFileDlgFlags(0); m_pRasterFileDlg->PutDialogTitle("Open File"); m_pRasterFileDlg->PutUIFlags( OPEN_LOADBITMAP | OPEN_SHOW_MULTIPAGE | OPEN_SHOW_PREVIEW | OPEN_USEFILESTAMP | OPEN_SHOW_FILEINFO | OPEN_SHOW_LOADOPTIONS | OPEN_SHOW_LOADCOMPRESSED | OPEN_SHOW_LOADROTATED | OPEN_SHOW_DELPAGE | OPEN_SHOW_PDFOPTIONS | OPEN_SHOW_RASTEROPTIONS | OPEN_SHOW_VECTOROPTIONS | OPEN_VIEWTOTALPAGES | OPEN_ENABLESIZING ); nRet= m_pRasterFileDlg->ShowOpenDlg((long)this->m_hWnd); if ( nRet == 0 && m_pRasterFileDlg->GetDialogStatus() == DLG_OK) { strFileName = (LPCTSTR)m_pRasterFileDlg->GetFileName(); nPage = m_pRasterFileDlg->GetPageNumber(); } else return; VariantInit(&va1); VariantInit(&va2); // This filter list is complete, except for GIF, which requires an LZW license if (strFileName.GetLength()) { // Hide the Lead control while we update the recordset m_LEAD1.ShowWindow(SW_HIDE); recset = m_ADODC1.GetRecordset(); BOOL bCanAdd= TRUE; CFields Fields; CField cwho; Fields = recset.GetFields(); va1.vt = VT_I4; va1.lVal = 0; va2.vt = VT_BSTR; va2.bstrVal = strFileName.AllocSysString(); strFile = strFileName.AllocSysString(); ILEADRaster *pRaster=NULL; HRESULT hr = CoCreateInstance(CLSID_LEADRaster, NULL, CLSCTX_ALL, IID_ILEADRaster, (void**)&pRaster); if (FAILED(hr)) return; int nRet = m_pRasterIO->Load(pRaster, strFile, 0, 1, 1); pRaster->Release(); if (nRet != 0) { CString csError; csError.Format(_T("You can not add this file, Error no = %d"), nRet); AfxMessageBox(csError); m_LEAD1.ShowWindow(SW_SHOW); return; } TRY { recset.AddNew(va1, va2); } CATCH_ALL(e) { AfxMessageBox(TEXT("Couldn't add this record"), MB_ICONEXCLAMATION); recset.CancelUpdate(); m_LEAD1.ShowWindow(SW_NORMAL); bCanAdd = FALSE; } END_CATCH_ALL // release any reference if (!bCanAdd) return; m_LEADOLEDB1.GetRaster().SetBitmap(0); m_pRasterIO->Load(m_LEAD1.GetRaster().m_lpDispatch, strFile, 0, 1, 1); m_pltAnn->PutAnnContainer(0); m_LEADOLEDB1.SetAnnContainer(0); m_bDataDirty = TRUE; m_LEADOLEDB1.SetDataDirty(TRUE); recset.Update(va1, va2); ::SysFreeString(va2.bstrVal); // Requery the data control's recordset recset.Requery(0); // Go to the new record, and show the LEAD control m_LEAD1.ShowWindow(SW_SHOW); csSearch = "who = '" + strFileName + "'"; va1 = recset.GetBookmark(); recset.Find((LPCTSTR)csSearch, 0, 1, va1); }/*search forward*/ } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnDelrec() { C_Recordset recset; recset = m_ADODC1.GetRecordset(); if (recset.GetBof() && recset.GetEof()) return; // Hide the LEAD control. m_LEAD1.ShowWindow(SW_HIDE); // Delete the record TRY { recset.Delete(1);//delete current record only // Requery the recordset m_bDeleted = TRUE; recset.Requery(0); } CATCH_ALL(e) { AfxMessageBox(TEXT("Can not delete this record, DB may have BOF or EOF")); } END_CATCH_ALL m_LEAD1.ShowWindow(SW_SHOW); m_bDeleted = FALSE; TRY { if (recset.GetEof()) recset.MoveLast(); } CATCH_ALL(e) { } END_CATCH_ALL } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnFindrec() { // Go to the first record that matches the specified text CString csInText; m_Text2.GetWindowText(csInText); CString csSearch; VARIANT va; C_Recordset recset; if(csInText.GetLength() > 0) { VariantInit(&va); recset = m_ADODC1.GetRecordset(); csSearch = "who LIKE '*" + csInText + "*'"; va = recset.GetBookmark(); recset.Find((LPCTSTR)csSearch, 0, 1/*search forward*/, va); recset.Requery(0); } } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnErrorAdodc1(long ErrorNumber, BSTR FAR* Description, long Scode, LPCTSTR Source, LPCTSTR HelpFile, long HelpContext, BOOL FAR* fCancelDisplay) { AfxMessageBox(TEXT("Error")); VARIANT va; VariantInit(&va); C_Recordset recset; recset = m_ADODC1.GetRecordset(); recset.MoveFirst(); } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnClickLeadrasterview1() { m_bQuit = TRUE; } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnDataLoadedLeadrasteroledb1(short nStatus) { if (nStatus == 0) { InitAnnotation(); m_pltAnn->PutAnnContainer(0); m_pltAnn->PutAnnContainer(m_LEADOLEDB1.GetAnnContainer()); switch (m_nUserMode) { case ANN_USERMODE_NONE: m_pltAnn->PutAnnUserMode (ANN_USERMODE_NONE); break; case ANN_USERMODE_DESIGN: m_pltAnn->PutAnnUserMode (ANN_USERMODE_DESIGN); break; case ANN_USERMODE_RUN: m_pltAnn->PutAnnUserMode (ANN_USERMODE_RUN); break; } OnEditToolSelect(); m_bDataDirty = FALSE; } else if(nStatus == ERROR_FILENOTFOUND) //if it's an empty record { if (m_ADODC1.GetMaxRecords() == 0) m_LEADOLEDB1.GetRaster().SetBitmap(0); } else if (nStatus != ERROR_FILENOTFOUND) //if it's not an empty record { } if (IsWindow(m_LEAD1.m_hWnd)) m_LEAD1.ForceRepaint(); } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnDataSavedLeadrasteroledb1(short nStatus) { if(nStatus != 0) { m_LEAD1.ForceRepaint(); AfxMessageBox(TEXT("Error saving to database!")); } } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnProgressStatusLeadrasteroledb1(short nPercent) { CString csOut; MSG msg; csOut.Format(TEXT("%d"), nPercent); csOut = csOut + "%"; SetWindowText(csOut); // are there any messages in the queue (like a button being pressed) ? while (PeekMessage(&msg,NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); /* Translates virtual key codes. */ DispatchMessage (&msg); /* Dispatches message to window. */ } //user asked to stop if (m_bQuit) m_LEADOLEDB1.SetEnableProgressEvent(FALSE); } ///////////////////////////////////////////////////////////////////////////// void COLEDBDlg::OnDestroy() { CDialog::OnDestroy(); if (m_pltAnn != NULL) { // Terminate a connection between source and sink. LPUNKNOWN pUnkSink = m_pRasterAnnSink->GetIDispatch(FALSE); AfxConnectionUnadvise(m_pltAnn, DIID__LEADRasterAnnotationEvents, pUnkSink, FALSE, m_dwCookie); delete m_pRasterAnnSink; m_pltAnn->Release(); m_pltAnn = NULL; } if (m_pRaster != NULL) m_pRaster->Release(); if (m_pRasterIO != NULL) m_pRasterIO->Release(); if (m_pRasterProcess != NULL) m_pRasterProcess->Release(); if (m_pRasterFileDlg) { if (m_pRasterKrnDlg) m_pRasterKrnDlg->FreeDlg(); m_pRasterFileDlg->Release (); } if(m_pRasterKrnDlg) m_pRasterKrnDlg->Release (); } /////////////////////////////////////////////////////////////////////////////