home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 January / pcwk_01_1999.iso / Wtestowe / Vistdstd / Install / Data.Z / Main.C < prev    next >
C/C++ Source or Header  |  1996-07-26  |  4KB  |  168 lines

  1. /*    MAIN.C - Window Procedure for GENERIC.EXE Demo
  2.  *  Copyright (C) 1991-1996 Visio Corporation. All rights reserved.
  3.  *
  4.  *    Abstract
  5.  *        This file implements the standard Windows message loop and window
  6.  *        procedure for the GENERIC.EXE demo.
  7.  */
  8.  
  9. #include <windows.h>
  10. #include <ole2.h> 
  11.  
  12. #if !defined (_WIN32)
  13.     #include <dispatch.h>  
  14. #endif
  15.  
  16. #include "resource.h"
  17.  
  18. int RunDemo(void);
  19. void ShowAboutDialog(HINSTANCE);
  20. LONG CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
  21. BOOL InitApplication(HANDLE);
  22. BOOL InitInstance(HANDLE, int);
  23.  
  24. HANDLE stc_hInst;
  25.  
  26. /**************************************************************************
  27.  *+ WinMain
  28.  *
  29.  *    The main message loop and application initialization.
  30.  */
  31. #ifdef __BORLANDC__
  32. #pragma argsused
  33. #endif 
  34. int PASCAL WinMain(
  35.     HINSTANCE hInstance,
  36.     HINSTANCE hPrevInstance,
  37.     LPSTR lpszCmdLine,
  38.     int nCmdShow) 
  39.     {
  40.     MSG msg;
  41.     HRESULT hResult;
  42.     
  43.     if ( hPrevInstance || !InitApplication(hInstance) )
  44.         return (FALSE);
  45.  
  46.     if ( !InitInstance(hInstance, nCmdShow) )
  47.         return (FALSE);
  48.  
  49.     hResult = OleInitialize(NULL);
  50.     if (hResult != NOERROR )
  51.         return (FALSE);
  52.  
  53.     while (GetMessage(&msg, NULL, 0, 0))
  54.         {
  55.         TranslateMessage(&msg);
  56.         DispatchMessage(&msg);
  57.         }
  58.     
  59.     OleUninitialize();
  60.     
  61.     return (msg.wParam);
  62.     }
  63.  
  64.  
  65. /**************************************************************************
  66.  *+ InitApplication
  67.  *
  68.  *    One time initialization to register the window class.
  69.  */
  70.  
  71. BOOL InitApplication(HANDLE hInstance)
  72.     {
  73.     WNDCLASS  wc;
  74.  
  75.     wc.style = 0;
  76.     wc.lpfnWndProc = MainWndProc;
  77.     wc.cbClsExtra = 0;
  78.     wc.cbWndExtra = 0;
  79.     wc.hInstance = hInstance;
  80.     wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_DISPATCH));
  81.     wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  82.     wc.hbrBackground = GetStockObject(WHITE_BRUSH);
  83.     wc.lpszMenuName =  "MainMenu";
  84.     wc.lpszClassName = "GenericDemo";
  85.  
  86.     return (RegisterClass(&wc));
  87.     }
  88.  
  89.  
  90. /**************************************************************************
  91.  *+ InitInstance
  92.  *
  93.  *    Per instance initialization.  Creates the frame window.
  94.  */
  95.  
  96. BOOL InitInstance(HANDLE hInstance, int nCmdShow)
  97.     {
  98.     HWND hWnd;
  99.  
  100.     /* Make window small.
  101.      */
  102.     LONG dwBaseUnits = GetDialogBaseUnits();
  103.     int winw = (150 * LOWORD(dwBaseUnits))/4;
  104.     int winh = (50 * HIWORD(dwBaseUnits))/8;
  105.  
  106.     stc_hInst = hInstance;
  107.         
  108. #ifdef _DEBUG
  109.     #define WINDOW_TITLE "Visio Automation Demo - DEBUG"
  110. #else
  111.     #define WINDOW_TITLE "Visio Automation Demo"
  112. #endif
  113.  
  114.     hWnd = CreateWindow("GenericDemo", WINDOW_TITLE,
  115.                         WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
  116.                         winw, winh, NULL, NULL, hInstance, NULL);
  117.  
  118.     if (!hWnd) return (FALSE);
  119.  
  120.     ShowWindow(hWnd, nCmdShow);
  121.     UpdateWindow(hWnd);
  122.     
  123.     return (TRUE);
  124.     }
  125.  
  126. /**************************************************************************
  127.  *+ MainWndProc
  128.  *
  129.  *    Frame window procedure.  The only special thing it does it run the 
  130.  *    demo when the Run Demo menu entry is selected.
  131.  */
  132.  
  133. LONG CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  134.     {
  135.     switch (message)
  136.         {
  137.         case WM_COMMAND:
  138.             switch (wParam)
  139.                 {
  140.                 case IDM_EXIT:
  141.                     DestroyWindow(hWnd);
  142.                     break;
  143.                     
  144.                 case IDM_RUNDEMO:
  145.                         RunDemo();
  146.                     break;
  147.             
  148.                 case IDM_ABOUT:
  149.                     ShowAboutDialog(stc_hInst);
  150.                     break;        
  151.                     
  152.                 default:
  153.                     return (DefWindowProc(hWnd, message, wParam, lParam));
  154.                 }
  155.             
  156.             break;
  157.             
  158.         case WM_DESTROY:
  159.             PostQuitMessage(0);
  160.             break;
  161.                 
  162.         default:
  163.             return (DefWindowProc(hWnd, message, wParam, lParam));
  164.         }
  165.     
  166.     return 0;
  167.     }
  168.