mirror of https://github.com/lianthony/NT4.0
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.
185 lines
3.7 KiB
185 lines
3.7 KiB
/***
|
|
*dispdemo.c - IDespatch demo/sample client application.
|
|
*
|
|
* Copyright (C) 1992-1994, Microsoft Corporation. All Rights Reserved.
|
|
* Information Contained Herein Is Proprietary and Confidential.
|
|
*
|
|
*Purpose:
|
|
* This module is the main entry point for the sample IDispatch client,
|
|
* dispdemo.exe.
|
|
*
|
|
* This program is intended to demonstrate a client invoking methods
|
|
* and referencing properties on a remote object via the IDispatch
|
|
* interface.
|
|
*
|
|
* The bulk of the sample can be found in the file crempoly.cpp, which
|
|
* implements CRemPoly, the remote polygon class.
|
|
*
|
|
*Implementation Notes:
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#include "dispdemo.h"
|
|
|
|
extern BOOL g_fTrace;
|
|
|
|
BOOL InitApplication(HINSTANCE);
|
|
BOOL InitInstance(HINSTANCE, int);
|
|
BOOL FAR PASCAL About(HWND, unsigned, WORD, LONG);
|
|
|
|
extern "C" {
|
|
int PASCAL WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
|
|
LRESULT FAR PASCAL MainWndProc(HWND, UINT, WPARAM, LPARAM);
|
|
}
|
|
|
|
HINSTANCE g_hInst;
|
|
|
|
TCHAR g_szDispDemoWClass[] = TSTR("DispDemoWClass");
|
|
|
|
extern "C" int PASCAL
|
|
WinMain(
|
|
HINSTANCE hinst,
|
|
HINSTANCE hPrevInstance,
|
|
LPSTR lpCmdLine,
|
|
int nCmdShow)
|
|
{
|
|
MSG msg;
|
|
|
|
|
|
(lpCmdLine); // UNUSED
|
|
|
|
if(!hPrevInstance)
|
|
if(!InitApplication(hinst))
|
|
return FALSE;
|
|
|
|
if(InitOle() != NOERROR)
|
|
return FALSE;
|
|
|
|
if(!InitInstance(hinst, nCmdShow))
|
|
return FALSE;
|
|
|
|
while(GetMessage(&msg, NULL, 0, 0)) {
|
|
TranslateMessage(&msg);
|
|
DispatchMessage(&msg);
|
|
}
|
|
|
|
UninitOle();
|
|
|
|
return msg.wParam;
|
|
}
|
|
|
|
|
|
BOOL
|
|
InitApplication(HINSTANCE hinst)
|
|
{
|
|
WNDCLASS wc;
|
|
|
|
wc.style = NULL;
|
|
wc.lpfnWndProc = MainWndProc;
|
|
wc.cbClsExtra = 0;
|
|
wc.cbWndExtra = 0;
|
|
wc.hInstance = hinst;
|
|
wc.hIcon = LoadIcon(hinst, TSTR("DISPDEMO"));
|
|
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
|
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
|
|
wc.lpszMenuName = TSTR("DispDemoMenu");
|
|
wc.lpszClassName = g_szDispDemoWClass;
|
|
if(!RegisterClass(&wc))
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
#ifdef WIN32
|
|
#define szAppTitle TSTR("IDispatch Demo App (32-bit)")
|
|
#else //WIN32
|
|
#define szAppTitle TSTR("IDispatch Demo App")
|
|
#endif //WIN32
|
|
|
|
BOOL
|
|
InitInstance(HINSTANCE hinst, int nCmdShow)
|
|
{
|
|
HWND hWnd;
|
|
|
|
g_hInst = hinst;
|
|
|
|
hWnd = CreateWindow(
|
|
g_szDispDemoWClass,
|
|
szAppTitle,
|
|
WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,
|
|
CW_USEDEFAULT, CW_USEDEFAULT, 300, 100,
|
|
NULL, NULL, hinst, NULL);
|
|
|
|
if(!hWnd)
|
|
return FALSE;
|
|
|
|
ShowWindow(hWnd, nCmdShow);
|
|
UpdateWindow(hWnd);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL FAR PASCAL
|
|
About(HWND hDlg, unsigned message, WORD wParam, LONG lParam)
|
|
{
|
|
switch(message){
|
|
case WM_INITDIALOG:
|
|
return TRUE;
|
|
|
|
case WM_COMMAND:
|
|
switch(wParam){
|
|
case IDOK:
|
|
case IDCANCEL:
|
|
EndDialog(hDlg, TRUE);
|
|
return TRUE;
|
|
}
|
|
break;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
extern "C" LRESULT FAR PASCAL
|
|
MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
HMENU hmenu;
|
|
static DLGPROC pfnAbout;
|
|
|
|
switch(message){
|
|
case WM_COMMAND:
|
|
switch(wParam){
|
|
case IDM_TRACE:
|
|
/* enable/disable trace */
|
|
g_fTrace = (g_fTrace) ? FALSE : TRUE;
|
|
hmenu = GetMenu(hwnd);
|
|
CheckMenuItem(hmenu, IDM_TRACE, g_fTrace ? MF_CHECKED : MF_UNCHECKED);
|
|
return 0;
|
|
|
|
case IDM_POLY:
|
|
DoPoly(CLSID_CPoly);
|
|
return 0;
|
|
|
|
case IDM_POLY2:
|
|
DoPoly(CLSID_CPoly2);
|
|
return 0;
|
|
|
|
case IDM_ABOUT:
|
|
pfnAbout = (DLGPROC)MakeProcInstance((FARPROC)About, g_hInst);
|
|
DialogBox(g_hInst, TSTR("AboutBox"), hwnd, pfnAbout);
|
|
FreeProcInstance(pfnAbout);
|
|
return 0;
|
|
}
|
|
break;
|
|
|
|
case WM_CLOSE:
|
|
DestroyWindow(hwnd);
|
|
return 0;
|
|
|
|
case WM_DESTROY:
|
|
PostQuitMessage(0);
|
|
return 0;
|
|
}
|
|
return DefWindowProc(hwnd, message, wParam, lParam);
|
|
}
|
|
|