gecko-dev/mailnews/mapi/mapi32/mapiipc.cpp

235 строки
4.9 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
//
// MAPI IPC Routines
// Written by: Rich Pizzarro (rhp@netscape.com)
// November 1997
//
#include <windows.h>
#include <windowsx.h>
#include <nscpmapi.h> // Should live in Communicator
#include "resource.h"
#include "mapiipc.h"
#include "mapismem.h"
#include "trace.h"
#ifndef WIN32
#include <string.h>
#endif
//
// Necessary variables...
//
static LONG instanceCount = 0;
HWND hWndMAPI = NULL;
char szClassName[] = "NetscapeMAPIClient";
char szWindowName[] = "NetscapeMAPI";
//
// External declares...
//
extern HINSTANCE hInstance;
void
ProcessCommand(HWND hWnd, int id, HWND hCtl, UINT codeNotify)
{
switch (id)
{
case IDOK:
case IDCANCEL:
{
ShowWindow(hWnd, SW_HIDE);
}
default:
;
}
}
BOOL CALLBACK LOADDS
MyDlgProc(HWND hWndMain, UINT wMsg, WPARAM wParam, LPARAM lParam)
{
switch (wMsg)
{
case WM_INITDIALOG:
{
hWndMAPI = hWndMain;
}
break;
case WM_CLOSE:
// DestroyWindow(hWndMain);
break;
case WM_DESTROY:
hWndMain = NULL;
break;
case WM_COMMAND:
HANDLE_WM_COMMAND(hWndMAPI, wParam, lParam, ProcessCommand);
break;
default:
return FALSE;
}
return TRUE;
}
BOOL
InitInstance(HINSTANCE hInstance)
{
//
// Create a main window for this application instance.
//
/* RICHIE - TRY SOME CHANGES!!!
hWndMAPI = CreateDialog((HINSTANCE) hInstance,
MAKEINTRESOURCE(ID_DIALOG_QAHOOK),
(HWND) NULL, (DLGPROC) MyDlgProc);
******/
hWndMAPI = CreateWindow(
szClassName, // pointer to registered class name
szWindowName, // pointer to window name
WS_CHILD, // window style
-10, // horizontal position of window
-10, // vertical position of window
1, // window width
1, // window height
GetDesktopWindow(), // handle to parent or owner window
NULL, // handle to menu or child-window identifier
hInstance, // handle to application instance
NULL // pointer to window-creation data
);
if (!hWndMAPI)
return FALSE;
else
return TRUE;
}
BOOL
InitApp(void)
{
#ifdef WIN32
WNDCLASS wc;
wc.style = 0;
wc.lpfnWndProc = DefDlgProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = DLGWINDOWEXTRA;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(ID_ICON_APP));
wc.hCursor = LoadCursor(0, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
wc.lpszMenuName = NULL;
wc.lpszClassName = szClassName;
if(!RegisterClass(&wc))
return FALSE;
#endif
return TRUE;
} // end InitApp
BOOL
InitDLL(void)
{
if (hWndMAPI != NULL)
return TRUE;
if (!InitApp())
{
return FALSE;
}
if (!InitInstance(hInstance))
{
return FALSE;
}
// ShowWindow(hWndMAPI, SW_SHOW); Just for jollies
return(TRUE);
}
//*************************************************************
//* Calls exposed for rest of DLL...
//*************************************************************
//
// Purpose: Open the API
// Return: 1 on success
// 0 on failure
//
DWORD nsMAPI_OpenAPI(void)
{
if (instanceCount > 0)
{
return(1);
}
++instanceCount;
return(1);
}
//
// Purpose: Close the API
//
void nsMAPI_CloseAPI(void)
{
--instanceCount;
if (instanceCount <= 0)
{
instanceCount = 0;
}
return;
}
//
// Send the actual request to Communicator
//
LRESULT
SendMAPIRequest(HWND hWnd,
DWORD mapiRequestID,
MAPIIPCType *ipcInfo)
{
LRESULT returnVal = 0;
COPYDATASTRUCT cds;
if (!InitDLL())
{
return 0;
}
cds.dwData = mapiRequestID;
cds.cbData = sizeof(MAPIIPCType);
cds.lpData = ipcInfo;
// Make the call into Communicator
returnVal = SendMessage(hWnd, WM_COPYDATA, (WPARAM) hWndMAPI, (LPARAM) &cds);
// Now kill the window...
DestroyWindow(hWndMAPI);
hWndMAPI = NULL;
UnregisterClass(szClassName, hInstance);
return returnVal;
}