home *** CD-ROM | disk | FTP | other *** search
/ Programming Windows 95 / Programming Windows 95.iso / code / CHAP11 / COLORS2.C < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-01  |  4.8 KB  |  134 lines

  1. /*------------------------------------------------
  2.    COLORS2.C -- Version using Modeless Dialog Box
  3.                 (c) Charles Petzold, 1996
  4.   ------------------------------------------------*/
  5.  
  6. #include <windows.h>
  7.  
  8. LRESULT CALLBACK WndProc     (HWND, UINT, WPARAM, LPARAM) ;
  9. BOOL    CALLBACK ColorScrDlg (HWND, UINT, WPARAM, LPARAM) ;
  10.  
  11. HWND hDlgModeless ;
  12.  
  13. int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
  14.                     PSTR szCmdLine, int iCmdShow)
  15.      {
  16.      static char  szAppName[] = "Colors2" ;
  17.      HWND         hwnd ;
  18.      MSG          msg ;
  19.      WNDCLASSEX   wndclass ;
  20.  
  21.      wndclass.cbSize        = sizeof (wndclass) ;
  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 (NULL, IDI_APPLICATION) ;
  28.      wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
  29.      wndclass.hbrBackground = CreateSolidBrush (0L) ;
  30.      wndclass.lpszMenuName  = NULL ;
  31.      wndclass.lpszClassName = szAppName ;
  32.      wndclass.hIconSm       = LoadIcon (NULL, IDI_APPLICATION) ;
  33.  
  34.      RegisterClassEx (&wndclass) ;
  35.  
  36.      hwnd = CreateWindow (szAppName, "Color Scroll",
  37.                           WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
  38.                           CW_USEDEFAULT, CW_USEDEFAULT,
  39.                           CW_USEDEFAULT, CW_USEDEFAULT,
  40.                           NULL, NULL, hInstance, NULL) ;
  41.  
  42.      ShowWindow (hwnd, iCmdShow) ;
  43.      UpdateWindow (hwnd) ;
  44.  
  45.      hDlgModeless = CreateDialog (hInstance, "ColorScrDlg", hwnd, ColorScrDlg) ;
  46.  
  47.      while (GetMessage (&msg, NULL, 0, 0))
  48.           {
  49.           if (hDlgModeless == 0 || !IsDialogMessage (hDlgModeless, &msg))
  50.                {
  51.                TranslateMessage (&msg) ;
  52.                DispatchMessage  (&msg) ;
  53.                }
  54.           }
  55.      return msg.wParam ;
  56.      }
  57.  
  58. LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
  59.      {
  60.      switch (iMsg)
  61.           {
  62.           case WM_DESTROY :
  63.                DeleteObject (
  64.                     (HGDIOBJ) SetClassLong (hwnd, GCL_HBRBACKGROUND,
  65.                          (LONG) GetStockObject (WHITE_BRUSH))) ;
  66.  
  67.                PostQuitMessage (0) ;
  68.                return 0 ;
  69.           }
  70.      return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
  71.      }
  72.  
  73. BOOL CALLBACK ColorScrDlg (HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM lParam)
  74.      {
  75.      static int iColor[3] ;
  76.      HWND       hwndParent, hCtrl ;
  77.      int        iCtrlID, iIndex ;
  78.  
  79.      switch (iMsg)
  80.           {
  81.           case WM_INITDIALOG :
  82.                for (iCtrlID = 10 ; iCtrlID < 13 ; iCtrlID++)
  83.                     {
  84.                     hCtrl = GetDlgItem (hDlg, iCtrlID) ;
  85.                     SetScrollRange (hCtrl, SB_CTL, 0, 255, FALSE) ;
  86.                     SetScrollPos   (hCtrl, SB_CTL, 0, FALSE) ;
  87.                     }
  88.                return TRUE ;
  89.  
  90.           case WM_VSCROLL :
  91.                hCtrl   = (HWND) lParam ;
  92.                iCtrlID = GetWindowLong (hCtrl, GWL_ID) ;
  93.                iIndex  = iCtrlID - 10 ;
  94.                hwndParent = GetParent (hDlg) ;
  95.  
  96.                switch (LOWORD (wParam))
  97.                     {
  98.                     case SB_PAGEDOWN :
  99.                          iColor[iIndex] += 15 ;        // fall through
  100.                     case SB_LINEDOWN :
  101.                          iColor[iIndex] = min (255, iColor[iIndex] + 1) ;
  102.                          break ;
  103.                     case SB_PAGEUP :
  104.                          iColor[iIndex] -= 15 ;        // fall through
  105.                     case SB_LINEUP :
  106.                          iColor[iIndex] = max (0, iColor[iIndex] - 1) ;
  107.                          break ;
  108.                     case SB_TOP :
  109.                          iColor[iIndex] = 0 ;
  110.                          break ;
  111.                     case SB_BOTTOM :
  112.                          iColor[iIndex] = 255 ;
  113.                          break ;
  114.                     case SB_THUMBPOSITION :
  115.                     case SB_THUMBTRACK :
  116.                          iColor[iIndex] = HIWORD (wParam) ;
  117.                          break ;
  118.                     default :
  119.                          return FALSE ;
  120.                     }
  121.                SetScrollPos  (hCtrl, SB_CTL,      iColor[iIndex], TRUE) ;
  122.                SetDlgItemInt (hDlg,  iCtrlID + 3, iColor[iIndex], FALSE) ;
  123.  
  124.                DeleteObject (
  125.                     (HGDIOBJ) SetClassLong (hwndParent, GCL_HBRBACKGROUND,
  126.                          (LONG) CreateSolidBrush (
  127.                               RGB (iColor[0], iColor[1], iColor[2])))) ;
  128.  
  129.                InvalidateRect (hwndParent, NULL, TRUE) ;
  130.                return TRUE ;
  131.           }
  132.      return FALSE ;
  133.      }
  134.