Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

202 lines
6.7 KiB

#include <windows.h>
#include <ole2.h>
#include "simple.h"
HANDLE hInst; /* current instance */
int PASCAL WinMain(
HANDLE hInstance,
HANDLE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
) {
MSG msg;
HDC hdc;
if (!hPrevInstance) /* Other instances of app running? */
if (!InitApplication(hInstance)) /* Initialize shared things */
return (FALSE); /* Exits if unable to initialize */
/* Perform initializations that apply to a specific instance */
if (!InitInstance(hInstance, nCmdShow))
return (FALSE);
/* Acquire and dispatch messages until a WM_QUIT message is received. */
while ( GetMessage(&msg, NULL, 0,0) ) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
BOOL InitApplication(hInstance)
HANDLE hInstance;
{
WNDCLASS wc;
wc.style = CS_OWNDC; /* Class style(s). */
wc.lpfnWndProc = MainWndProc; /* Function to retrieve messages for */
/* windows of this class. */
wc.cbClsExtra = 0; /* No per-class extra data. */
wc.cbWndExtra = 0; /* No per-window extra data. */
wc.hInstance = hInstance; /* Application that owns the class. */
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = GetStockObject(LTGRAY_BRUSH);
wc.lpszMenuName = "SimpleMenu"; /* Name of menu resource in .RC file. */
wc.lpszClassName = "SimpleClass"; /* Name used in call to CreateWindow. */
/* Register the window class and return success/failure code. */
return (RegisterClass(&wc));
}
BOOL InitInstance(hInstance, nCmdShow)
HANDLE hInstance; /* Current instance identifier. */
int nCmdShow; /* Param for first ShowWindow() call. */
{
HWND hWnd; /* Main window handle. */
HWND hWndX;
OFSTRUCT ofFileData;
HANDLE hLogFile;
HDC hDC;
int i;
SIZE size;
int length;
BOOL f;
hInst = hInstance;
/* Create a main window for this application instance. */
hWnd = CreateWindow(
"SimpleClass", /* See RegisterClass() call. */
"OLE 2.0 Simple Thunk Testing", /* Text for window title bar. */
WS_OVERLAPPEDWINDOW, /* Window style. */
280, /* Default horizontal position. */
50, /* Default vertical position. */
CW_USEDEFAULT, /* Default width. */
CW_USEDEFAULT, /* Default height. */
NULL, /* Overlapped windows have no parent. */
NULL, /* Use the window class menu. */
hInstance, /* This instance owns this window. */
NULL /* Pointer not needed. */
);
/* If window could not be created, return "failure" */
if (!hWnd)
return (FALSE);
ShowWindow(hWnd, nCmdShow); /* Show the window */
UpdateWindow(hWnd); /* Sends WM_PAINT message */
return (TRUE); /* Returns the value from PostQuitMessage */
}
void LogResult( LPSTR message, HRESULT hr )
{
char text[256];
if ( hr ) {
wsprintf(text,"%s:%08lX\n",message,hr);
OutputDebugString(text);
}
}
LONG FAR PASCAL MainWndProc(hWnd, message, wParam, lParam)
HWND hWnd; /* window handle */
UINT message; /* type of message */
WPARAM wParam; /* additional information */
LONG lParam; /* additional information */
{
FARPROC lpProcAbout; /* pointer to the "About" function */
PAINTSTRUCT ps;
long rc;
int i;
HRESULT hr;
switch (message) {
case WM_COMMAND: /* message: command from application menu */
switch( wParam ) {
case IDM_ABOUT:
lpProcAbout = MakeProcInstance(About, hInst);
DialogBox(hInst, /* current instance */
"AboutBox", /* resource to use */
hWnd, /* parent handle */
lpProcAbout); /* About() instance address */
FreeProcInstance(lpProcAbout);
break; /* Lets Windows process it */
default:
{ char text[100];
HDC hdc;
static int position = 0;
position += 20;
wsprintf(text,"Cmd = %04X",wParam);
hdc = GetDC( hWnd );
TextOut(hdc,100,position,text,lstrlen(text));
ReleaseDC( hWnd, hdc );
}
return (DefWindowProc(hWnd, message, wParam, lParam));
case IDM_COINIT:
hr = CoInitialize(NULL);
LogResult( "CoInitialize", hr );
break;
}
break;
case WM_DESTROY: /* message: window being destroyed */
PostQuitMessage(0);
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hDC;
char text[100];
hDC = BeginPaint( hWnd, &ps );
EndPaint( hWnd, &ps );
}
break;
default: /* Passes it on if unproccessed */
rc = DefWindowProc(hWnd, message, wParam, lParam);
return( rc );
}
return (NULL);
}
BOOL FAR PASCAL About(hDlg, message, wParam, lParam)
HWND hDlg; /* window handle of the dialog box */
UINT message; /* type of message */
WPARAM wParam; /* message-specific information */
LONG lParam;
{
switch (message) {
case WM_INITDIALOG: /* message: initialize dialog box */
return (TRUE);
case WM_COMMAND: /* message: received a command */
if (wParam == IDOK /* "OK" box selected? */
|| wParam == IDCANCEL) { /* System menu close command? */
EndDialog(hDlg, TRUE); /* Exits the dialog box */
return (TRUE);
}
break;
}
return (FALSE); /* Didn't process a message */
}