WINMAIN.CPP
/***  
*dispdemo.c - IDespatch demo/sample client application. 
* 
*  This is a part of the Microsoft Source Code Samples. 
* 
*  Copyright 1992 - 1998 Microsoft Corporation. All rights reserved. 
* 
*  This source code is only intended as a supplement to Microsoft Development 
*  Tools and/or WinHelp documentation.  See these sources for detailed 
*  information regarding the Microsoft samples programs. 
* 
*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); 
}