|
|
1.1 root 1: /***
2: *dispdemo.c - IDespatch demo/sample client application.
3: *
4: * Copyright (C) 1992, Microsoft Corporation. All Rights Reserved.
5: * Information Contained Herein Is Proprietary and Confidential.
6: *
7: *Purpose:
8: * This module is the main entry point for the sample IDispatch client,
9: * dispdemo.exe.
10: *
11: * This program is intended to demonstrate a client invoking methods
12: * and referencing properties on a remote object via the IDispatch
13: * interface.
14: *
15: * The bulk of the sample can be found in the file crempoly.cpp, which
16: * implements CRemPoly, the remote polygon class.
17: *
18: *Implementation Notes:
19: *
20: *****************************************************************************/
21:
22: #include <windows.h>
23: #include <ole2.h>
24: #include <dispatch.h>
25:
26: #include "dispdemo.h"
27:
28:
29: BOOL InitApplication(HANDLE);
30: BOOL InitInstance(HANDLE, int);
31: BOOL FAR PASCAL About(HWND, unsigned, WORD, LONG);
32:
33: STDAPI_(BOOL) InitOle(void);
34: STDAPI_(void) UninitOle(void);
35:
36: extern "C" {
37: int PASCAL WinMain(HANDLE, HANDLE, LPSTR, int);
38: LRESULT FAR PASCAL MainWndProc(HWND, UINT, WPARAM, LPARAM);
39: }
40:
41: HANDLE g_hInst;
42:
43: BOOL g_fTrace = FALSE;
44:
45: char g_szDispDemoWClass[] = "DispDemoWClass";
46:
47: extern "C" int PASCAL
48: WinMain(
49: HANDLE hinst,
50: HANDLE hPrevInstance,
51: LPSTR lpCmdLine,
52: int nCmdShow)
53: {
54: MSG msg;
55:
56:
57: (lpCmdLine); // UNUSED
58:
59: if(!hPrevInstance)
60: if(!InitApplication(hinst))
61: return FALSE;
62:
63: if(!InitOle())
64: return FALSE;
65:
66: if(!InitInstance(hinst, nCmdShow))
67: return FALSE;
68:
69: while(GetMessage(&msg, NULL, 0, 0)) {
70: TranslateMessage(&msg);
71: DispatchMessage(&msg);
72: }
73:
74: UninitOle();
75:
76: return msg.wParam;
77: }
78:
79:
80: BOOL
81: InitApplication(HANDLE hinst)
82: {
83: WNDCLASS wc;
84:
85: wc.style = NULL;
86: wc.lpfnWndProc = MainWndProc;
87: wc.cbClsExtra = 0;
88: wc.cbWndExtra = 0;
89: wc.hInstance = hinst;
90: wc.hIcon = LoadIcon(hinst, "DISPDEMO");
91: wc.hCursor = LoadCursor(NULL, IDC_ARROW);
92: wc.hbrBackground = GetStockObject(WHITE_BRUSH);
93: wc.lpszMenuName = "DispDemoMenu";
94: wc.lpszClassName = g_szDispDemoWClass;
95: if(!RegisterClass(&wc))
96: return FALSE;
97:
98: return TRUE;
99: }
100:
101:
102: BOOL
103: InitInstance(HANDLE hinst, int nCmdShow)
104: {
105: HWND hWnd;
106:
107: g_hInst = hinst;
108:
109: hWnd = CreateWindow(
110: g_szDispDemoWClass,
111: "IDispatch Demo App",
112: WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,
113: CW_USEDEFAULT, CW_USEDEFAULT, 300, 100,
114: NULL, NULL, hinst, NULL);
115:
116: if(!hWnd)
117: return FALSE;
118:
119: ShowWindow(hWnd, nCmdShow);
120: UpdateWindow(hWnd);
121:
122: return TRUE;
123: }
124:
125:
126: BOOL FAR PASCAL
127: About(HWND hDlg, unsigned message, WORD wParam, LONG lParam)
128: {
129: switch(message){
130: case WM_INITDIALOG:
131: return TRUE;
132:
133: case WM_COMMAND:
134: switch(wParam){
135: case IDOK:
136: case IDCANCEL:
137: EndDialog(hDlg, TRUE);
138: return TRUE;
139: }
140: break;
141: }
142: return FALSE;
143: }
144:
145:
146: extern "C" LRESULT FAR PASCAL
147: MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
148: {
149: HMENU hmenu;
150: static FARPROC pfnAbout;
151:
152: switch(message){
153: case WM_COMMAND:
154: switch(wParam){
155: case IDM_TRACE:
156: /* enable/disable trace */
157: g_fTrace = (g_fTrace) ? FALSE : TRUE;
158: hmenu = GetMenu(hwnd);
159: CheckMenuItem(hmenu, IDM_TRACE, g_fTrace ? MF_CHECKED : MF_UNCHECKED);
160: return 0;
161:
162: case IDM_POLY:
163: DoPoly(CLSID_CPoly);
164: return 0;
165:
166: case IDM_POLY2:
167: DoPoly(CLSID_CPoly2);
168: return 0;
169:
170: case IDM_ABOUT:
171: pfnAbout = (FARPROC)MakeProcInstance((FARPROC)About, g_hInst);
172: DialogBox(g_hInst, "AboutBox", hwnd, pfnAbout);
173: FreeProcInstance(pfnAbout);
174: return 0;
175: }
176: break;
177:
178: case WM_CLOSE:
179: DestroyWindow(hwnd);
180: return 0;
181:
182: case WM_DESTROY:
183: PostQuitMessage(0);
184: return 0;
185: }
186: return DefWindowProc(hwnd, message, wParam, lParam);
187: }
188:
189:
190: STDAPI_(BOOL)
191: InitOle(void)
192: {
193: if(OleInitialize(NULL) != 0)
194: return FALSE;
195:
196: return TRUE;
197: }
198:
199:
200: STDAPI_(void)
201: UninitOle()
202: {
203: OleUninitialize();
204: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.