home *** CD-ROM | disk | FTP | other *** search
- //////////////////////////////////////////////////////////////////////////////
- //
- // FILE: MAIN.CPP
- //
- // DESCRIPTION: This file contains the code for the entry function and
- // the main window for this form
- //
- //
- // Copyright (c) 1995, Microsoft Corporation.
- // All rights reserved.
- //
- //--
-
- #include "precomp.h"
- #include <wrap3d.h>
-
- // Just to make it easier to determine appropriate code paths:
- #if defined (_WIN32) // This had better be true, but just in case...
- #define IS_WIN32 TRUE
- #else
- #define IS_WIN32 FALSE
- #endif
- #define IS_NT IS_WIN32 && (BOOL)(GetVersion() < 0x80000000)
- #define IS_WIN32S IS_WIN32 && (BOOL)(!(IS_NT) && (LOBYTE(LOWORD(GetVersion()))<4))
- #define IS_CHICAGO (BOOL)(!(IS_NT) && !(IS_WIN32S)) && IS_WIN32
-
- ///////////////////////// Global Variables /////////////////////////////////
-
- extern CClassFactory ClassFactory;
- HINSTANCE g_hinst;
- char SzAppName[] = "SimpFrm"; // The name of this application
- char g_szSendWinClass[] = "SampleFormSend";
- char g_szReadWinClass[] = "SampleFormRead";
- char g_szFormName[] = "Simple Sample Form";
- char g_szWindowCaption[] = "Sample Form";
- CBaseForm * g_PfrmFirst = NULL;
- LPVOID g_lpCtl3d = NULL; // CTL3D context
-
- //// Internal Flags
-
- ULONG UlCoRegForm = 0;
- BOOL FMapiInitialized = FALSE;
-
- //we have to create an atom containig string representation of
- // the class id; the atom has to have the same live time as the
- //ClassFactory object
- static ATOM atmCFAlive;
-
- //////////////////////////// Extern and forward declarations //////////////
-
- LRESULT CALLBACK WndProcMain(HWND, UINT, WPARAM, LPARAM);
- LRESULT CALLBACK WndProcForm(HWND, UINT, WPARAM, LPARAM);
-
- //// InitApplication
- //
-
- BOOL InitApplication(HINSTANCE hInstance)
- {
- WNDCLASSEX wc;
-
- // Fill in the window class structure with parameters that describe
- // the main window. This window will never be displayed and exists
- // so that OLE can talk to us.
-
- wc.cbSize = sizeof(wc);
- wc.style = 0;
- wc.lpfnWndProc = (WNDPROC) WndProcMain;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = hInstance;
- wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- wc.hCursor = ::LoadCursor(NULL, IDC_ARROW);
- wc.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);
- wc.lpszMenuName = NULL;
- wc.lpszClassName = SzAppName;
- wc.hIconSm = LoadIcon(hInstance, "SmallIcon");
-
- // Register the window class.
- if (!RegisterClassEx(&wc))
- {
- return FALSE;
- }
-
- // Now setup and register the acutual window class used for the
- // form.
-
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpszClassName = g_szSendWinClass;
- wc.lpfnWndProc = (WNDPROC) WndProcForm;
- wc.cbWndExtra = 4;
- wc.hIcon = LoadIcon(hInstance, "IconL");
- // if (IS_CHICAGO) {
- // wc.lpszMenuName = "CHICAGO";
- // }
- // else {
- wc.lpszMenuName = MAKEINTRESOURCE(IDR_SEND_FORM);
- // }
-
- if (!RegisterClassEx(&wc))
- {
- return FALSE;
- }
-
- // Now setup and register the acutual window class used for the
- // form.
-
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpszClassName = g_szReadWinClass;
- wc.lpfnWndProc = (WNDPROC) WndProcForm;
- wc.cbWndExtra = 4;
- wc.hIcon = LoadIcon(hInstance, "IconL");
- // if (IS_CHICAGO) {
- // wc.lpszMenuName = "CHICAGO";
- // }
- // else {
- wc.lpszMenuName = MAKEINTRESOURCE(IDR_READ_FORM);
- // }
-
- return RegisterClassEx(&wc);
- }
-
- //// InitInstance
- //
-
- BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
- {
- HRESULT hr;
- ULONG ulVer;
- HWND hWnd;
- BOOL f;
-
- ///////////////////////////////////////////////////////////////////////
- //
- // Initialize OLE and MAPI
-
- ulVer = CoBuildVersion ();
- #if 0
- if (HIWORD (ulVer) != rmm)
- {
- return FALSE;
- }
- #endif // 0
-
- //
- // Initialize MAPI -- this implies a successfull initialization of
- // OLE on success
- //
-
- hr = MAPIInitialize (NULL);
- if (HR_FAILED(hr))
- {
- return FALSE;
- }
- FMapiInitialized = TRUE;
-
- //
- // Give ourselves the 3D look
- //
-
- if (!g_lpCtl3d)
- {
- g_lpCtl3d = CTL3D_Initialize(hInstance);
- if (g_lpCtl3d)
- CTL3D_AutoSubclass(g_lpCtl3d, hInstance, &f);
- }
-
-
- //Create global atom with string representaton of our class id
- if(0 == FindAtom(szGUID))
- atmCFAlive = GlobalAddAtom(szGUID);
-
-
- //
- // Register our class factory for the form
- //
-
- hr = CoRegisterClassObject(CLSID_IPM_NOTE_SAMPLE, &ClassFactory,
- CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE,
- &UlCoRegForm);
- if (FAILED(hr))
- {
- return FALSE;
- }
-
- //
- // Create a main window -- This window is used for dealing with
- // messages coming from the top of the work and consitutes
- // our main window. We create this window of size zero and
- // not visible since it is not the window the user
- // interacts with
-
- hWnd = CreateWindow(SzAppName, NULL, WS_OVERLAPPEDWINDOW,
- 0, 0, 0, 0, NULL, NULL, hInstance, NULL);
- if (!hWnd)
- {
- return FALSE;
- }
-
- ClassFactory.ms_hWndMain = hWnd;
- g_hinst = hInstance;
-
- return TRUE;
- }
-
-
- int ExitInstance ()
- {
- //
- // Revoke all classes factories here so we don't get any new
- // creates
-
- if (UlCoRegForm != 0)
- {
- CoRevokeClassObject (UlCoRegForm);
- UlCoRegForm = 0;
- }
-
- //
- // Shut down CTL3D
-
- if (g_lpCtl3d)
- {
- CTL3D_Uninitialize(g_lpCtl3d);
- g_lpCtl3d = NULL;
- }
-
- //
- // Uninitialize MAPI
-
- if (FMapiInitialized)
- {
- MAPIUninitialize();
- FMapiInitialized = FALSE;
- }
-
- GlobalDeleteAtom(atmCFAlive);
-
- return 0;
- }
-
-
- //// WinMain
- //
-
- int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
- LPSTR /*lpCmdLine*/, int nCmdShow)
- {
- MSG msg;
-
- if (!hPrevInstance)
- {
- // Perform instance initialization
- if (!InitApplication(hInstance))
- {
- return FALSE;
- }
- }
-
- // Perform application initialization
- if (!InitInstance(hInstance, nCmdShow))
- {
- return FALSE;
- }
-
-
- // Main message loop
- while (GetMessage(&msg, NULL, 0, 0))
- {
- CBaseForm * pfrm;
-
- //
- // Find which top level window this message is for
- //
-
- for (pfrm = g_PfrmFirst; pfrm != NULL; pfrm = pfrm->GetNext())
- {
- if (pfrm->TranslateMessage(msg))
- {
- break;
- }
- }
-
- if (pfrm == NULL)
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- }
-
- ExitInstance();
-
- return msg.wParam;
- }
-
-
-
- //// A specialized version of the window proc which plays how messages
- // are going to be handled.
- //
-
- LRESULT CALLBACK WndProcMain(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
- {
- switch (msg)
- {
- case WM_DESTROY:
- PostQuitMessage(0);
- break;
-
- default:
- return DefWindowProc (hwnd, msg, wParam, lParam);
- }
-
- return 0;
- }
-
-