// oleview.cpp : Defines the class behaviors for the application. // // This is a part of the Microsoft Foundation Classes C++ library. // Copyright (C) 1992-1998 Microsoft Corporation // All rights reserved. // // This source code is only intended as a supplement to the // Microsoft Foundation Classes Reference and related // electronic documentation provided with the library. // See these sources for detailed information regarding the // Microsoft Foundation Classes product. #include "stdafx.h" #include #include #include "iviewers\\iviewers.h" #include "OleView.h" #include "mainfrm.h" #include "doc.h" #include "obj_vw.h" #include "regview.h" #include "shadow.h" #ifdef _DEBUG #undef THIS_FILE static char BASED_CODE THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // COle2ViewApp BEGIN_MESSAGE_MAP(COle2ViewApp, CWinApp) //{{AFX_MSG_MAP(COle2ViewApp) ON_COMMAND(ID_APP_ABOUT, OnAppAbout) //}}AFX_MSG_MAP ON_COMMAND(ID_HELP_INDEX, CWinApp::OnHelpIndex) ON_COMMAND(ID_HELP_USING, CWinApp::OnHelpUsing) ON_COMMAND(ID_HELP, CWinApp::OnHelp) ON_COMMAND(ID_CONTEXT_HELP, CWinApp::OnContextHelp) ON_COMMAND(ID_DEFAULT_HELP, CWinApp::OnHelpIndex) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // COle2ViewApp construction COle2ViewApp::COle2ViewApp() { // TODO: add construction code here, // Place all significant initialization in InitInstance } ///////////////////////////////////////////////////////////////////////////// // The one and only COle2ViewApp object COle2ViewApp theApp; #if _MFC_VER >= 0x0300 OSVERSIONINFO g_osvi ; #endif ///////////////////////////////////////////////////////////////////////////// // COle2ViewApp initialization BOOL COle2ViewApp::InitInstance() { if (FAILED(AfxOleInit())) //OleInitialize(NULL))) { AfxMessageBox( _T("OleInitialize failed. Could not initialized OLE 2; Ole2View cannot run.") ) ; return FALSE; } SetRegistryKey( IDS_REGISTRYKEY ); m_pFont = ReallyCreateFont( NULL, _T("MS Sans Serif"), _T("Regular"), 8, 0 ) ; m_pFontBold = ReallyCreateFont( NULL, _T("MS Sans Serif"), _T("Bold"), 8, 0 ) ; LoadBitmaps( FALSE ) ; TEXTMETRIC tm ; CDC dc ; HDC hdc = GetDC( NULL ) ; dc.Attach( hdc ) ; m_pFont = dc.SelectObject( m_pFont ) ; dc.GetTextMetrics( &tm ) ; m_pFont = dc.SelectObject( m_pFont ) ; dc.Detach(); ReleaseDC( NULL, hdc ) ; m_cyFont = tm.tmHeight + tm.tmExternalLeading ; g_osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO) ; if (GetVersionEx( &g_osvi ) && g_osvi.dwMajorVersion >= 4) { AfxEnableWin40Compatibility() ; } else Enable3dControls(); // AutoRegister iviewers if not already registered // // char szBuf[80] ; LONG cb = sizeof(szBuf) ; // if (RegQueryValue(HKEY_CLASSES_ROOT, "Ole2View.ITypeLib.1", szBuf, &cb) != ERROR_SUCCESS) // { CString str ; CString str2 ; HINSTANCE hinst = LoadLibrary( "iviewers.dll" ) ; if (hinst > (HINSTANCE)HINSTANCE_ERROR) { // Get DllRegisterServer function HRESULT (FAR STDAPICALLTYPE * lpDllEntryPoint)(void); (FARPROC&)lpDllEntryPoint = GetProcAddress(hinst, "DllRegisterServer"); if (lpDllEntryPoint) { HRESULT hr ; if (FAILED(hr = (*lpDllEntryPoint)())) { str.LoadString( IDS_AUTOREGFAILED ) ; str2.LoadString( IDS_IVIEWERSNOTFOUND2 ) ; str += str2 ; AfxMessageBox( str ) ; } } else { str.LoadString( IDS_IVIEWERSNOTFOUND3 ) ; str2.LoadString( IDS_IVIEWERSNOTFOUND2 ) ; str += str2 ; AfxMessageBox( str ) ; } FreeLibrary( hinst ) ; } else { str.LoadString( IDS_IVIEWERSNOTFOUND1 ) ; str2.LoadString( IDS_IVIEWERSNOTFOUND2 ) ; str += str2 ; str2.LoadString( IDS_IVIEWERSNOTFOUND4 ) ; str += str2 ; AfxMessageBox( str ) ; } // } // Register the application's document templates. Document templates // serve as the connection between documents, frame windows and views. AddDocTemplate(new CSingleDocTemplate(IDR_MAINFRAME, RUNTIME_CLASS(COle2ViewDoc), RUNTIME_CLASS(CMainFrame), // main SDI frame window RUNTIME_CLASS(CObjTreeView))); int nCmdShow = m_nCmdShow ; m_nCmdShow = SW_HIDE ; OnFileNew() ; ((CMainFrame*)GetMainWnd())->RestorePosition(nCmdShow) ; // TODO: If there's something on the command line, try to // figure out if it's a // - CLSID or a ProgID: CoCreateInstance the thing // - A filename: Bind to the file, via a FileMoniker // Then enum the interfaces as normal. // if (m_lpCmdLine != NULL && *m_lpCmdLine != '\0') { AfxMessageBox( IDS_BADCOMMANDLINE ) ; } return TRUE; } int COle2ViewApp::ExitInstance() { if (m_pFont) delete m_pFont ; if (m_pFontBold) delete m_pFontBold ; // FreeBitmaps() ; return CWinApp::ExitInstance() ; } void COle2ViewApp::LoadBitmaps( BOOL fFree ) { #if 0 COLORREF rgbNorm, rgbHigh ; rgbNorm = GetSysColor( COLOR_WINDOW ) ; rgbHigh = GetSysColor( COLOR_HIGHLIGHT ) ; if (fFree) FreeBitmaps() ; for (int i = IDB_FIRST ; i <= IDB_LAST ; i++) { m_rgbmNorm[BMINDEX(i)] = bmLoadAndTranslate( i, rgbNorm ) ; m_rgbmHigh[BMINDEX(i)] = bmLoadAndTranslate( i, rgbHigh ) ; } #else if (fFree) m_images.DeleteImageList() ; if (0 == m_images.Create( IDB_IMAGELIST, 16, 100, RGBLTGREEN )) { AfxMessageBox("Could not load bitmaps" ) ; } #endif } #if 0 void FreeABitmap( CBitmap* p ) { if (p) delete p ; } #endif void COle2ViewApp::FreeBitmaps() { #if 0 for (int i = IDB_FIRST ; i <= IDB_LAST ; i++) { FreeABitmap( m_rgbmNorm[BMINDEX(i)]) ; FreeABitmap( m_rgbmHigh[BMINDEX(i)]) ; } #else m_images.DeleteImageList() ; #endif } ///////////////////////////////////////////////////////////////////////////// // COle2ViewApp commands // We override OnIdle so that we can ensure the right message is on the status // bar. Note we have to call OnIdle alawys to make sure stuff like // CoFreeUnusedLibraries actually works. (Bug fixed in 1.13). ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; CButton m_Cancel; CStatic m_WrittenBy; CStatic m_Version; CStatic m_Group; CStatic m_Copyright; CStatic m_AppName; CStatic m_AllRightsReserved; //}}AFX_DATA // Implementation protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //{{AFX_MSG(CAboutDlg) virtual BOOL OnInitDialog(); //}}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) DDX_Control(pDX, IDCANCEL, m_Cancel); DDX_Control(pDX, IDC_WRITTENBY, m_WrittenBy); DDX_Control(pDX, IDC_VERSION, m_Version); DDX_Control(pDX, IDC_GROUP, m_Group); DDX_Control(pDX, IDC_COPYRIGHT, m_Copyright); DDX_Control(pDX, IDC_APPNAME, m_AppName); DDX_Control(pDX, IDC_ALLRIGHTSRESERVED, m_AllRightsReserved); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) //}}AFX_MSG_MAP END_MESSAGE_MAP() // App command to run the dialog void COle2ViewApp::OnAppAbout() { CAboutDlg aboutDlg; aboutDlg.DoModal(); } typedef struct tagVS_VERSION { WORD wTotLen; WORD wValLen; TCHAR szSig[16]; VS_FIXEDFILEINFO vffInfo; } VS_VERSION; BOOL CAboutDlg::OnInitDialog() { CDialog::OnInitDialog(); TCHAR szVersion[64] ; wsprintf( szVersion, "Version 2.00.001 - %s",(LPTSTR)__DATE__ ); // m_Cancel.SetFont( theApp.m_pFont ) ; // m_AppName.SetFont( theApp.m_pFont ) ; m_Version.SetWindowText( szVersion ) ; // m_Version.SetFont( theApp.m_pFont ) ; // m_Copyright.SetFont( theApp.m_pFont ) ; // m_AllRightsReserved.SetFont( theApp.m_pFont ) ; // m_WrittenBy.SetFont( theApp.m_pFont ) ; // m_Group.SetFont( theApp.m_pFont ) ; DlgCenter( m_hWnd, ::GetParent( m_hWnd ), FALSE ) ; return TRUE; // return TRUE unless you set the focus to a control }