Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

272 lines
5.0 KiB

/***
*
* Copyright (C) 1993-1994, Microsoft Corporation. All Rights Reserved.
* Information Contained Herein Is Proprietary and Confidential.
*
* File:
* main.cpp
*
* Purpose:
* This file contains:
*
* WinMain() and WndProc(), which are called by Windows when the app is run.
* Code to initialize and uninitialize OLE.
* Code to create and destroy the window for the application.
*
*****************************************************************************/
#include "common.h"
#include "resource.h"
#include "hello.h"
#include <string.h>
/* Global variables.
*/
DWORD g_dwCHelloCF = 0; // Holds the return code for class factory creation.
CHello FAR* g_phello = NULL; // Pointer to a CHello object.
TCHAR g_szAppName[] = TSTR("Hello"); // Name of the application.
/* Forward declarations.
*/
HRESULT InitOle(void);
void UninitOle(void);
BOOL InitApplication(HINSTANCE);
BOOL InitInstance(HINSTANCE, int);
/* Let Windows call WinMain and WndProc.
*/
extern "C"
{
long FAR PASCAL WndProc(HWND, UINT, WPARAM, LPARAM);
int PASCAL WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
}
/* WinMain
*
* Windows calls WinMain when the application starts.
*
*/
extern "C" int PASCAL
WinMain(
HINSTANCE hinst,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
if(!hPrevInstance)
if(!InitApplication(hinst))
return FALSE;
if(InitOle() != NOERROR)
return FALSE;
if(!InitInstance(hinst, nCmdShow)){
UninitOle();
return FALSE;
}
while(GetMessage(&msg, NULL, NULL, NULL)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// Uninitialize OLE.
UninitOle();
return msg.wParam;
}
/* InitApplication
*
* Create a window and register it with Windows.
*
* Return FALSE if an error occurs and TRUE otherwise.
*/
BOOL
InitApplication(HINSTANCE hinst)
{
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = DLGWINDOWEXTRA;
wc.hInstance = hinst;
wc.hIcon = LoadIcon(hinst, g_szAppName); // Loads hello.ico
wc.hCursor = LoadCursor(NULL, IDC_ARROW); // Normal arrow pointer
wc.hbrBackground = (HBRUSH) (COLOR_APPWORKSPACE+1);
wc.lpszMenuName = NULL; // No menus.
wc.lpszClassName= g_szAppName;
// Tell Windows about the window class we just created.
// Exit if an error occurs.
if(!RegisterClass(&wc))
return FALSE;
return TRUE;
}
/* InitInstance
*
* Create an instance of CHello and make g_phello
* point to it..
*
* Return FALSE if an error occurs and TRUE otherwise.
*/
BOOL
InitInstance(HINSTANCE hinst, int nCmdShow)
{
HWND hwnd;
// Create the window and show it
hwnd = CreateDialog(hinst, g_szAppName, 0, NULL);
ShowWindow(hwnd, nCmdShow);
g_phello->m_hwnd = hwnd;
return TRUE;
}
extern "C" long FAR PASCAL
WndProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch(message) {
case WM_COMMAND:
g_phello->ProcessCommand(wParam);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
HRESULT
InitOle()
{
HRESULT hresult;
IClassFactory FAR* pcf;
if((hresult = OleInitialize(NULL)) != NOERROR)
return hresult;
// create the single global instance of CHello
if((g_phello = CHello::Create()) == NULL){
hresult = ResultFromScode(E_OUTOFMEMORY);
return hresult;
}
// Create an instance of the class factory for CHello.
// Exit if an error occurs.
pcf = CHelloCF::Create();
if (pcf == NULL) {
UninitOle();
return hresult;
}
// Register the class factroy. Exit if an error occurs.
hresult = CoRegisterClassObject(CLSID_CHello,
pcf,
CLSCTX_LOCAL_SERVER,
REGCLS_MULTIPLEUSE,
&g_dwCHelloCF);
if (hresult != NOERROR) {
pcf->Release();
UninitOle();
return hresult;
}
pcf->Release();
// If execution has reached this spot, then no errors have occurred.
return NOERROR;
}
/* UninitOLE
*
* Tell OLE that we are going away.
*
*/
void
UninitOle()
{
// If a class factory was successfully created earlier then
// tell OLE that the object is no longer available.
if(g_dwCHelloCF != 0)
CoRevokeClassObject(g_dwCHelloCF);
// cause the remaining typeinfo to be released
if (g_phello != NULL)
g_phello->Release();
// Tell OLE we are done using them.
OleUninitialize();
}
#if defined(WIN32)
extern "C" char FAR*
ConvertStrWtoA(OLECHAR FAR* strIn, char FAR* buf, UINT size)
{
int badConversion = FALSE;
WideCharToMultiByte(CP_ACP, NULL,
strIn, -1,
buf, size,
NULL, &badConversion);
return buf;
}
extern "C" char FAR*
AnsiString(OLECHAR FAR* strIn)
{
static char buf[256];
return (ConvertStrWtoA(strIn, buf, 256));
}
#endif