home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 May / Pcwk5b98.iso / Borland / Cplus45 / BC45 / TUTORIAL.PAK / CPPOCF0.CPP < prev    next >
C/C++ Source or Header  |  1995-08-29  |  3KB  |  141 lines

  1. // ---------------------------------------------------------------------------
  2. // Copyright (C) 1994 Borland International
  3. // CppOcf0.cpp
  4. // ---------------------------------------------------------------------------
  5. #include <ocf/ocfpch.h>
  6. #include <ocf/ocdefs.h>
  7. #include <windowsx.h>
  8. #include "CppOcf0.h"
  9.  
  10. // Starting point of all Windows programs
  11. //
  12. int PASCAL
  13. WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  14.   char far* /*lpCmdLine*/, int nCmdShow)
  15. {
  16.   try {
  17.     MSG msg;
  18.  
  19.     // Any previous instance?
  20.     if (!hPrevInstance)
  21.       // Initialize app-specific stuff
  22.       if (!InitApplication(hInstance))
  23.         return 0;
  24.  
  25.     // Instance-specific
  26.     if (!InitInstance(hInstance, nCmdShow))
  27.       return 0;
  28.  
  29.     // Standard Windows message loop
  30.     while (GetMessage(&msg, 0, 0, 0)) {
  31.       TranslateMessage(&msg);
  32.       DispatchMessage(&msg);
  33.     }
  34.   }
  35.   catch (...) {
  36.     MessageBox(GetFocus(), "Unknown exception", "Exception caught", MB_OK);
  37.   }
  38.   return 0;
  39. }
  40.  
  41.  
  42. //
  43. // Initialize application-specific stuff and register the class
  44. //
  45. bool
  46. InitApplication(HINSTANCE hInstance)
  47. {
  48.   WNDCLASS wc;
  49.  
  50.   wc.style          = 0;
  51.   wc.lpfnWndProc    = (WNDPROC) MainWndProc;
  52.   wc.cbClsExtra     = 0;
  53.   wc.cbWndExtra     = 0;
  54.   wc.hInstance      = hInstance;
  55.   wc.hIcon          = LoadIcon(0, IDI_APPLICATION);
  56.   wc.hCursor        = LoadCursor(0, IDC_ARROW);
  57.   wc.hbrBackground  = (HBRUSH)GetStockObject(WHITE_BRUSH);
  58.   wc.lpszMenuName   = MENUNAME;
  59.   wc.lpszClassName  = CLASSNAME;
  60.   return ToBool(RegisterClass(&wc));
  61. }
  62.  
  63.  
  64. //
  65. // Initialize instance and display the main window
  66. //
  67. bool
  68. InitInstance(HINSTANCE hInstance, int nCmdShow)
  69. {
  70.   HWND hwnd;
  71.  
  72.   hwnd = CreateWindow(CLASSNAME, TITLE,
  73.     WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
  74.     CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
  75.     0, 0, hInstance, 0);
  76.  
  77.   if (!hwnd)
  78.     return false;
  79.   ShowWindow(hwnd, nCmdShow);
  80.   UpdateWindow(hwnd);
  81.   return true;
  82. }
  83.  
  84.  
  85. //
  86. // Standard message-handler routine for main window
  87. //
  88. long CALLBACK _export
  89. MainWndProc(HWND hwnd, uint message, WPARAM wParam, LPARAM lParam)
  90. {
  91.   switch (message) {
  92.     HANDLE_MSG(hwnd, WM_CREATE,   MainWnd_OnCreate);
  93.     HANDLE_MSG(hwnd, WM_CLOSE,    MainWnd_OnClose);
  94.     HANDLE_MSG(hwnd, WM_DESTROY,  MainWnd_OnDestroy);
  95.     HANDLE_MSG(hwnd, WM_PAINT,    MainWnd_OnPaint);
  96.     HANDLE_MSG(hwnd, WM_COMMAND,  MainWnd_OnCommand);
  97.   }
  98.   return DefWindowProc(hwnd, message, wParam, lParam);
  99. }
  100.  
  101. bool
  102. MainWnd_OnCreate(HWND /*hwnd*/, CREATESTRUCT FAR* /*lpCreateStruct*/)
  103. {
  104.   return true;
  105. }
  106.  
  107. void
  108. MainWnd_OnClose(HWND hwnd)
  109. {
  110.   DestroyWindow(hwnd);
  111. }
  112.  
  113. void
  114. MainWnd_OnDestroy(HWND /*hwnd*/)
  115. {
  116.   PostQuitMessage(0);
  117. }
  118.  
  119. void
  120. MainWnd_OnPaint(HWND hwnd)
  121. {
  122.   PAINTSTRUCT ps;
  123.   BeginPaint(hwnd, &ps);
  124.  
  125.   RECT rect;
  126.   GetClientRect(hwnd, &rect);
  127.  
  128.   EndPaint(hwnd, &ps);
  129. }
  130.  
  131. void
  132. MainWnd_OnCommand(HWND hwnd, int id, HWND /*hwndCtl*/, uint /*codeNotify*/)
  133. {
  134.   switch (id) {
  135.     case CM_EXIT: {
  136.       PostMessage(hwnd, WM_CLOSE, 0, 0);
  137.       break;
  138.     }
  139.   }
  140. }
  141.