|
|
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 "dispdemo.h"
23:
24: extern BOOL g_fTrace;
25:
26: BOOL InitApplication(HANDLE);
27: BOOL InitInstance(HANDLE, int);
28: BOOL FAR PASCAL About(HWND, unsigned, WORD, LONG);
29:
30: extern "C" {
31: int PASCAL WinMain(HANDLE, HANDLE, LPSTR, int);
32: LRESULT FAR PASCAL MainWndProc(HWND, UINT, WPARAM, LPARAM);
33: }
34:
35: HANDLE g_hInst;
36:
37: char g_szDispDemoWClass[] = "DispDemoWClass";
38:
39: extern "C" int PASCAL
40: WinMain(
41: HANDLE hinst,
42: HANDLE hPrevInstance,
43: LPSTR lpCmdLine,
44: int nCmdShow)
45: {
46: MSG msg;
47:
48:
49: (lpCmdLine); // UNUSED
50:
51: if(!hPrevInstance)
52: if(!InitApplication(hinst))
53: return FALSE;
54:
55: if(InitOle() != NOERROR)
56: return FALSE;
57:
58: if(!InitInstance(hinst, nCmdShow))
59: return FALSE;
60:
61: while(GetMessage(&msg, NULL, 0, 0)) {
62: TranslateMessage(&msg);
63: DispatchMessage(&msg);
64: }
65:
66: UninitOle();
67:
68: return msg.wParam;
69: }
70:
71:
72: BOOL
73: InitApplication(HANDLE hinst)
74: {
75: WNDCLASS wc;
76:
77: wc.style = NULL;
78: wc.lpfnWndProc = MainWndProc;
79: wc.cbClsExtra = 0;
80: wc.cbWndExtra = 0;
81: wc.hInstance = hinst;
82: wc.hIcon = LoadIcon(hinst, "DISPDEMO");
83: wc.hCursor = LoadCursor(NULL, IDC_ARROW);
84: wc.hbrBackground = GetStockObject(WHITE_BRUSH);
85: wc.lpszMenuName = "DispDemoMenu";
86: wc.lpszClassName = g_szDispDemoWClass;
87: if(!RegisterClass(&wc))
88: return FALSE;
89:
90: return TRUE;
91: }
92:
93:
94: BOOL
95: InitInstance(HANDLE hinst, int nCmdShow)
96: {
97: HWND hWnd;
98:
99: g_hInst = hinst;
100:
101: hWnd = CreateWindow(
102: g_szDispDemoWClass,
103: "IDispatch Demo App",
104: WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,
105: CW_USEDEFAULT, CW_USEDEFAULT, 300, 100,
106: NULL, NULL, hinst, NULL);
107:
108: if(!hWnd)
109: return FALSE;
110:
111: ShowWindow(hWnd, nCmdShow);
112: UpdateWindow(hWnd);
113:
114: return TRUE;
115: }
116:
117:
118: BOOL FAR PASCAL
119: About(HWND hDlg, unsigned message, WORD wParam, LONG lParam)
120: {
121: switch(message){
122: case WM_INITDIALOG:
123: return TRUE;
124:
125: case WM_COMMAND:
126: switch(wParam){
127: case IDOK:
128: case IDCANCEL:
129: EndDialog(hDlg, TRUE);
130: return TRUE;
131: }
132: break;
133: }
134: return FALSE;
135: }
136:
137:
138: extern "C" LRESULT FAR PASCAL
139: MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
140: {
141: HMENU hmenu;
142: static FARPROC pfnAbout;
143:
144: switch(message){
145: case WM_COMMAND:
146: switch(wParam){
147: case IDM_TRACE:
148: /* enable/disable trace */
149: g_fTrace = (g_fTrace) ? FALSE : TRUE;
150: hmenu = GetMenu(hwnd);
151: CheckMenuItem(hmenu, IDM_TRACE, g_fTrace ? MF_CHECKED : MF_UNCHECKED);
152: return 0;
153:
154: case IDM_POLY:
155: DoPoly(CLSID_CPoly);
156: return 0;
157:
158: case IDM_POLY2:
159: DoPoly(CLSID_CPoly2);
160: return 0;
161:
162: case IDM_ABOUT:
163: pfnAbout = (FARPROC)MakeProcInstance((FARPROC)About, g_hInst);
164: DialogBox(g_hInst, "AboutBox", hwnd, pfnAbout);
165: FreeProcInstance(pfnAbout);
166: return 0;
167: }
168: break;
169:
170: case WM_CLOSE:
171: DestroyWindow(hwnd);
172: return 0;
173:
174: case WM_DESTROY:
175: PostQuitMessage(0);
176: return 0;
177: }
178: return DefWindowProc(hwnd, message, wParam, lParam);
179: }
180:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.