home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / progwin / chap10 / about3.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-11-12  |  5.1 KB  |  157 lines

  1. /*------------------------------------------
  2.    ABOUT3.C -- About Box Demo Program No. 3
  3.                (c) Charles Petzold, 1990
  4.   ------------------------------------------*/
  5.  
  6. #include <windows.h>
  7. #include "about3.h"
  8.  
  9. long FAR PASCAL WndProc (HWND, WORD, WORD, LONG) ;
  10. long FAR PASCAL EllipPushWndProc (HWND, WORD, WORD, LONG) ;
  11.  
  12. int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance,
  13.                     LPSTR lpszCmdLine, int nCmdShow)
  14.      {
  15.      static char szAppName [] = "About3" ;
  16.      MSG         msg;
  17.      HWND        hwnd ;
  18.      WNDCLASS    wndclass ;
  19.  
  20.      if (!hPrevInstance) 
  21.           {
  22.           wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
  23.           wndclass.lpfnWndProc   = WndProc ;
  24.           wndclass.cbClsExtra    = 0 ;
  25.           wndclass.cbWndExtra    = 0 ;
  26.           wndclass.hInstance     = hInstance ;
  27.           wndclass.hIcon         = LoadIcon (hInstance, szAppName) ;
  28.           wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
  29.           wndclass.hbrBackground = GetStockObject (WHITE_BRUSH) ;
  30.           wndclass.lpszMenuName  = szAppName ;
  31.           wndclass.lpszClassName = szAppName ;
  32.  
  33.           RegisterClass (&wndclass) ;
  34.  
  35.           wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
  36.           wndclass.lpfnWndProc   = EllipPushWndProc ;
  37.           wndclass.cbClsExtra    = 0 ;
  38.           wndclass.cbWndExtra    = 0 ;
  39.           wndclass.hInstance     = hInstance ;
  40.           wndclass.hIcon         = NULL ;
  41.           wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
  42.           wndclass.hbrBackground = COLOR_WINDOW + 1 ;
  43.           wndclass.lpszMenuName  = NULL ;
  44.           wndclass.lpszClassName = "EllipPush" ;
  45.  
  46.           RegisterClass (&wndclass) ;
  47.           }
  48.  
  49.      hwnd = CreateWindow (szAppName, "About Box Demo Program",
  50.                           WS_OVERLAPPEDWINDOW,
  51.                           CW_USEDEFAULT, CW_USEDEFAULT,
  52.                           CW_USEDEFAULT, CW_USEDEFAULT,
  53.                           NULL, NULL, hInstance, NULL) ;
  54.  
  55.      ShowWindow (hwnd, nCmdShow) ;
  56.      UpdateWindow (hwnd); 
  57.  
  58.      while (GetMessage (&msg, NULL, 0, 0))
  59.           {
  60.           TranslateMessage (&msg) ;
  61.           DispatchMessage (&msg) ;
  62.           }
  63.      return msg.wParam ;
  64.      }
  65.  
  66. BOOL FAR PASCAL AboutDlgProc (HWND hDlg, WORD message, WORD wParam, LONG lParam)
  67.      {
  68.      switch (message)
  69.           {
  70.           case WM_INITDIALOG:
  71.                return TRUE ;
  72.  
  73.           case WM_COMMAND:
  74.                switch (wParam)
  75.                     {
  76.                     case IDOK:
  77.                          EndDialog (hDlg, 0) ;
  78.                          return TRUE ;
  79.                     }
  80.                break ;
  81.           }
  82.      return FALSE ;
  83.      }
  84.  
  85. long FAR PASCAL WndProc (HWND hwnd, WORD message, WORD wParam, LONG lParam)
  86.      {
  87.      static FARPROC lpfnAboutDlgProc ;
  88.      static HANDLE  hInstance ;
  89.  
  90.      switch (message)
  91.           {
  92.           case WM_CREATE:
  93.                hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
  94.  
  95.                lpfnAboutDlgProc = MakeProcInstance (AboutDlgProc, hInstance) ;
  96.                return 0 ;
  97.  
  98.           case WM_COMMAND:
  99.                switch (wParam)
  100.                     {
  101.                     case IDM_ABOUT:
  102.                          DialogBox (hInstance, "AboutBox", hwnd,
  103.                                         lpfnAboutDlgProc) ;
  104.                          return 0 ;
  105.                     }
  106.                break ;
  107.      
  108.           case WM_DESTROY :
  109.                PostQuitMessage (0) ;
  110.                return 0 ;
  111.           }
  112.      return DefWindowProc (hwnd, message, wParam, lParam) ;
  113.      }
  114.  
  115. long FAR PASCAL EllipPushWndProc (HWND hwnd, WORD message,
  116.                                   WORD wParam, LONG lParam)
  117.      {
  118.      char        szText [40] ;
  119.      HBRUSH      hBrush ;
  120.      HDC         hdc ;
  121.      PAINTSTRUCT ps ;
  122.      RECT        rect ;
  123.  
  124.      switch (message)
  125.           {
  126.           case WM_PAINT:
  127.                GetClientRect (hwnd, &rect) ;
  128.                GetWindowText (hwnd, szText, sizeof szText) ;
  129.  
  130.                hdc = BeginPaint (hwnd, &ps) ;
  131.  
  132.                hBrush = CreateSolidBrush (GetSysColor (COLOR_WINDOW)) ;
  133.                hBrush = SelectObject (hdc, hBrush) ;
  134.                SetBkColor (hdc, GetSysColor (COLOR_WINDOW)) ;
  135.                SetTextColor (hdc, GetSysColor (COLOR_WINDOWTEXT)) ;
  136.  
  137.                Ellipse (hdc, rect.left, rect.top, rect.right, rect.bottom) ;
  138.                DrawText (hdc, szText, -1, &rect,
  139.                               DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
  140.  
  141.                DeleteObject (SelectObject (hdc, hBrush)) ;
  142.  
  143.                EndPaint (hwnd, &ps) ;
  144.                return 0 ;
  145.  
  146.           case WM_KEYUP:
  147.                if (wParam != VK_SPACE)
  148.                     break ;
  149.                                         // fall through
  150.           case WM_LBUTTONUP:
  151.                SendMessage (GetParent (hwnd), WM_COMMAND,
  152.                     GetWindowWord (hwnd, GWW_ID), (LONG) hwnd) ;
  153.                return 0 ;
  154.           }
  155.      return DefWindowProc (hwnd, message, wParam, lParam) ;
  156.      }
  157.