home *** CD-ROM | disk | FTP | other *** search
- /**************************************************************************
- THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
- ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
- PARTICULAR PURPOSE.
-
- Copyright 1997 Microsoft Corporation. All Rights Reserved.
- **************************************************************************/
-
- /**************************************************************************
-
- File: DOServer.cpp
-
- Description: General function implementation.
-
- **************************************************************************/
-
- /**************************************************************************
- #include statements
- **************************************************************************/
-
- #include "DOServer.h"
- #include "ClsFact.h"
- #include <windowsx.h>
- #include <CommDlg.h>
-
- #include <initguid.h>
-
- // {F0FD0C00-65BA-11d0-B66F-00A0C90348D6}
- DEFINE_GUID( CLSID_SimpleDocObject,
- 0xf0fd0c00,
- 0x65ba,
- 0x11d0,
- 0xb6,
- 0x6f,
- 0x0,
- 0xa0,
- 0xc9,
- 0x3,
- 0x48,
- 0xd6);
-
- /**************************************************************************
- private function prototypes
- **************************************************************************/
-
- BOOL InitApp(BOOL, int);
- void CenterWindow(HWND);
-
- /**************************************************************************
- global variables
- **************************************************************************/
-
- HINSTANCE g_hInst;
- DWORD g_DllRefCount;
- DWORD g_dwRegister;
-
- /**************************************************************************
-
- WinMain
-
- **************************************************************************/
-
- int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
- {
- BOOL fEmbedding;
- MSG msg;
-
- g_hInst = hInstance;
-
- //check for the embedding switch
- ParseCommandLine(lpCmdLine, &fEmbedding, NULL);
-
- if(!fEmbedding)
- {
- DialogBox(g_hInst, MAKEINTRESOURCE(IDD_MAIN_DIALOG), NULL, (DLGPROC)MainDlgProc);
- return 0;
- }
-
- if(!InitApp(fEmbedding, nCmdShow))
- return 0;
-
- //DebugBreak();
-
- //The message loop will only exit when the main object gets destroyed.
- while(GetMessage(&msg, NULL, 0, 0))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
-
- OutputDebugString(TEXT("Exiting WinMain\n"));
-
- if(g_dwRegister)
- CoRevokeClassObject(g_dwRegister);
-
- CoUninitialize();
-
- return msg.wParam;
- }
-
- /**************************************************************************
-
- InitApp()
-
- **************************************************************************/
-
- BOOL InitApp(BOOL fEmbedding, int nCmdShow)
- {
- //initialize OLE
- if(FAILED(CoInitialize(NULL)))
- return FALSE;
-
- CClassFactory *pClassFactory = new CClassFactory();
-
- if(NULL == pClassFactory)
- {
- CoUninitialize();
- return FALSE;
- }
-
- LPUNKNOWN pUnknown;
- HRESULT hr;
-
- hr = pClassFactory->QueryInterface(IID_IUnknown, (LPVOID*)&pUnknown);
- if(FAILED(hr))
- {
- pClassFactory->Release();
- return FALSE;
- }
-
- //register the class object
- hr = CoRegisterClassObject( CLSID_SimpleDocObject,
- pUnknown,
- CLSCTX_LOCAL_SERVER,
- REGCLS_MULTIPLEUSE,
- &g_dwRegister);
-
- if(FAILED(hr))
- {
- pClassFactory->Release();
- return FALSE;
- }
-
- return TRUE;
- }
-
- /**************************************************************************
-
- MainDlgProc()
-
- **************************************************************************/
-
- BOOL CALLBACK MainDlgProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam)
- {
- static COleDocument *pOleDoc;
-
- switch(uMessage)
- {
- case WM_INITDIALOG:
- CenterWindow(hWnd);
-
- pOleDoc = new COleDocument();
-
- if(pOleDoc)
- {
- EnableWindow(GetDlgItem(hWnd, IDC_REGISTER), TRUE);
- EnableWindow(GetDlgItem(hWnd, IDC_CREATE_FILE), TRUE);
- }
-
- break;
-
- case WM_DESTROY:
- if(pOleDoc)
- {
- delete pOleDoc;
- }
-
- break;
-
- case WM_COMMAND:
- switch(GET_WM_COMMAND_ID(wParam, lParam))
- {
- case IDOK:
- case IDCANCEL:
- EndDialog(hWnd, 0);
- break;
-
- case IDC_REGISTER:
- if(pOleDoc)
- {
- pOleDoc->RegisterServer();
- }
- break;
-
- case IDC_CREATE_FILE:
- if(pOleDoc)
- {
- pOleDoc->CreateFile(hWnd);
- }
- break;
- }
- return FALSE;
- }
-
- return FALSE;
- }
-
-
- /**************************************************************************
-
- ColorHookProc()
-
- **************************************************************************/
-
- BOOL CALLBACK ColorHookProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam)
- {
- static COleDocument *pOleDoc;
- static UINT uSaveOK;
-
- switch(uMessage)
- {
- case WM_INITDIALOG:
- {
- UINT uSelect;
-
- pOleDoc = (COleDocument*)((LPOPENFILENAME)(lParam))->lCustData;
-
- uSaveOK = RegisterWindowMessage(FILEOKSTRING);
-
- switch(pOleDoc->m_Color)
- {
- default:
- case RED_COLOR:
- uSelect = IDC_RED;
- break;
-
- case GREEN_COLOR:
- uSelect = IDC_GREEN;
- break;
-
- case BLUE_COLOR:
- uSelect = IDC_BLUE;
- break;
- }
-
- CheckRadioButton(hWnd, IDC_RED, IDC_BLUE, uSelect);
- }
- break;
-
- case WM_DESTROY:
- break;
-
- default:
- if(uMessage == uSaveOK)
- {
- //Save button pressed
- if(IsDlgButtonChecked(hWnd, IDC_GREEN))
- {
- pOleDoc->m_Color = GREEN_COLOR;
- }
- else if(IsDlgButtonChecked(hWnd, IDC_BLUE))
- {
- pOleDoc->m_Color = BLUE_COLOR;
- }
- else
- {
- pOleDoc->m_Color = RED_COLOR;
- }
- }
-
- break;
- }
-
- return FALSE;
- }
-
- /*****************************************************************************
-
- CenterWindow
-
- *****************************************************************************/
-
- void CenterWindow(HWND hWnd)
- {
- RECT rc;
- int x,
- y;
-
- GetWindowRect(hWnd, &rc);
-
- x = GetSystemMetrics(SM_CXSCREEN)/2 - ((rc.right - rc.left)/2);
- y = GetSystemMetrics(SM_CYSCREEN)/2 - ((rc.bottom - rc.top)/2);
-
- //don't move the window if it's already in the right position
- if((x != rc.left) || (y != rc.top))
- MoveWindow(hWnd, x, y, rc.right - rc.left, rc.bottom - rc.top, TRUE);
- }
-
-