windows-nt/Source/XPSP1/NT/com/oleutest/server1/testsrv.cxx
2020-09-26 16:20:57 +08:00

205 lines
5.1 KiB
C++

//+-------------------------------------------------------------------
// File: testsrv.cxx
//
// Contents:
//
// Classes: CBasicSrvCF - IUnknown IClassFactory
// CBasicSrv - IUnknown IPersist IPersistFile IParseDisplayName
//
// Notes: This code is written based on OLE2.0 code. Therefore
// all error codes, defines etc are OLE style rather than Cairo
//
// History: 24-Nov-92 DeanE Created
// 31-Dec-93 ErikGav Chicago port
//---------------------------------------------------------------------
#pragma optimize("",off)
#include <windows.h>
#include <ole2.h>
#include "testsrv.hxx"
#include <stdio.h>
// BUGBUG - memory allocation hacks need these so new and delete don't
// break us
//
#include <malloc.h>
#include <dos.h>
#define IDM_DEBUG 0x100
extern "C" LRESULT FAR PASCAL MainWndProc(HWND, UINT, WPARAM, LPARAM);
void ReportMessage(HWND, WORD);
// This is global because we're still in $%E#$#K 16-bit world
HWND g_hwndMain = NULL;
// Note constructor cannot fail
CTestServerApp tsaMain;
//+--------------------------------------------------------------
// Function: WinMain
//
// Synopsis: Initializes application and controls message pump.
//
// Returns: Exits with exit code 0 if success, non-zero otherwise
//
// History: 25-Nov-92 DeanE Created
//---------------------------------------------------------------
int PASCAL WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCmdline,
int nCmdShow)
{
static TCHAR szAppName[] = TEXT("OleServer");
MSG msg;
WNDCLASS wndclass;
if (!hPrevInstance)
{
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = MainWndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(125));
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
if (0==RegisterClass(&wndclass))
{
// Error! Clean up and exit
return(LOG_ABORT);
}
}
g_hwndMain = CreateWindow(
szAppName,
TEXT("OLE Server"),
WS_OVERLAPPEDWINDOW | WS_VSCROLL,
GetSystemMetrics(SM_CXSCREEN)/12, // Init X pos
GetSystemMetrics(SM_CYSCREEN)/12, // Init Y pos
GetSystemMetrics(SM_CXSCREEN)*2/3, // width
GetSystemMetrics(SM_CYSCREEN)*2/3, // height
NULL,
NULL,
hInstance,
NULL);
if (NULL==g_hwndMain)
{
// Error! Clean up and exit
return(LOG_ABORT);
}
// Add debug option to system menu
HMENU hmenu = GetSystemMenu(g_hwndMain, FALSE);
AppendMenu(hmenu, MF_SEPARATOR, 0, NULL);
AppendMenu(hmenu, MF_STRING | MF_ENABLED, IDM_DEBUG, TEXT("Debug"));
// Initialize Application
if (S_OK != tsaMain.InitApp(lpszCmdline))
{
tsaMain.CloseApp();
return(LOG_ABORT);
}
if (tsaMain.GetEmbeddedFlag())
{
// We're running as an embedded app
// Don't show the main window unless we're instructed to do so
// BUGBUG - In-place editing is NYI
ShowWindow(g_hwndMain, SW_SHOWMINIMIZED);
}
else
{
// We are not running as an embedded app - show the main window
ShowWindow(g_hwndMain, nCmdShow);
}
UpdateWindow(g_hwndMain);
// message loop
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// Clean up and exit
// BUGBUG - check return code?
tsaMain.CloseApp();
return(0);
}
//+--------------------------------------------------------------
// Function: MainWndProc
//
// Synopsis: Callback for the server window
//
// Returns: Varies dependent on message received.
//
// History: 25-Nov-92 DeanE Created
//---------------------------------------------------------------
extern "C" LRESULT FAR PASCAL MainWndProc(
HWND hwnd,
UINT wMsg,
WPARAM wParam,
LPARAM lParam)
{
switch(wMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
return(0);
case WM_USER:
DestroyWindow(hwnd);
return 0;
case WM_SYSCOMMAND:
if (wParam == IDM_DEBUG)
{
// Request for a debug breakpoint!
DebugBreak();
}
default:
break;
}
return(DefWindowProc(hwnd, wMsg, wParam, lParam));
}
void ReportMessage(HWND hwnd, WORD wParam)
{
TCHAR szBuffer[256];
szBuffer[0] = '\0';
switch (wParam)
{
case MB_SHOWVERB:
lstrcpy(szBuffer, TEXT("OLEIVERB_SHOW Received"));
break;
case MB_PRIMVERB:
lstrcpy(szBuffer, TEXT("OLEIVERB_PRIMARY Received"));
break;
default:
lstrcpy(szBuffer, TEXT("Unrecognized ReportMessage code"));
break;
}
MessageBox(hwnd, szBuffer, TEXT("OLE Server"), MB_ICONINFORMATION | MB_OK);
}