|
|
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.