home *** CD-ROM | disk | FTP | other *** search
/ Programming Tool Box / SIMS_2.iso / bp_6_93 / vbwin / control / line3d.c < prev    next >
C/C++ Source or Header  |  1993-01-05  |  4KB  |  136 lines

  1. // Frame.c - Steuerelementkontrollprozedur FRAME
  2. // Autor: Dipl.-Ing. Andreas Maslo
  3.  
  4. #define  NOCOMM
  5. #include <windows.h>
  6.  
  7. #include <vbapi.h>
  8. #include <string.h>
  9. #include "line3d.h"
  10.  
  11. // lokale Prototypen
  12. VOID NEAR DrawBack(PLINE3D pline3d, HWND hwnd, HDC hdc);
  13. VOID NEAR RecalcArea(PLINE3D pline3d, HWND hwnd);
  14.  
  15. // Line3D-Kontrollprozedur
  16. LONG FAR PASCAL _export Line3dCtlProc
  17. (
  18.     HCTL   hctl,
  19.     HWND   hwnd,
  20.     USHORT msg,
  21.     USHORT wp,
  22.     LONG   lp
  23. )
  24. {
  25.     PLINE3D pline3d = NULL;
  26.     HDC     hdc;
  27.     LPRECT  prect = &pline3d->rectDrawInto;
  28.  
  29.     switch (msg)
  30.     {
  31.         case WM_CREATE:
  32.           pline3d = (PLINE3D)VBDerefControl(hctl);
  33.           pline3d->LineStyle = 1;
  34.           VBSetControlProperty(hctl, IPROP_LINE3D_BACKCOLOR, RGB(192, 192, 192));
  35.           break;
  36.         case WM_PAINT:
  37.           pline3d = (PLINE3D)VBDerefControl(hctl);
  38.           if (wp)
  39.               DrawBack(pline3d, hwnd, (HDC)wp);
  40.             else
  41.               {
  42.                PAINTSTRUCT ps;
  43.                BeginPaint(hwnd, &ps);
  44.                DrawBack(pline3d, hwnd, ps.hdc);
  45.                EndPaint(hwnd, &ps);
  46.               }
  47.           break;
  48.         case WM_SIZE:
  49.           pline3d = (PLINE3D)VBDerefControl(hctl);
  50.           RecalcArea(pline3d, hwnd);
  51.           break;
  52.         case VBM_SETPROPERTY:
  53.           //benutzerdefinierte Eigenschaften
  54.           switch (wp)
  55.               {
  56.                case IPROP_LINE3D_LINESTYLE:
  57.                    //Rahmenstil wurde gewechselt
  58.                  pline3d = (PLINE3D)VBDerefControl(hctl);
  59.                  pline3d->LineStyle = (ENUM)lp;
  60.                  InvalidateRect(hwnd, prect, FALSE);
  61.                break;
  62.           }
  63.           break;
  64.     }
  65.     //alles weitere an Visual Basic weiterleiten
  66.     return VBDefControlProc(hctl, hwnd, msg, wp, lp);
  67. }
  68.  
  69.  
  70. //Zeichnen des Steuerelementes
  71. //Aufruf erfolgt durch Botschaft WM_PAINT
  72. VOID NEAR DrawBack
  73. (
  74.     PLINE3D pline3d,
  75.     HWND    hwnd,
  76.     HDC     hdc
  77. )
  78. {
  79.     HBRUSH  hbr;
  80.     HBRUSH  hbrOld = NULL;
  81.     LPSTR   lpstr;
  82.     LPRECT  prect = &pline3d->rectDrawInto;
  83.  
  84.     HFONT   hfontOld;
  85.     HPEN    hPen;
  86.  
  87.     //Rechteck ausfⁿllen und mit selber Farbe umranden
  88.     hbr = (HBRUSH)SendMessage(GetParent(hwnd), WM_CTLCOLOR,
  89.                       hdc, MAKELONG(hwnd, 0));
  90.     hPen=SelectObject(hdc,CreatePen(PS_SOLID,1,RGB(192,192,192)));
  91.     hbrOld = SelectObject(hdc, hbr);
  92.     Rectangle(hdc, prect->left, prect->top, prect->right, prect->bottom);
  93.     //Linie zeichen
  94.     if (pline3d->LineStyle == 1)
  95.         {
  96.          //horizontale 3D-Linie
  97.          DeleteObject(SelectObject(hdc,CreatePen(PS_SOLID,1,RGB(129,129,129))));
  98.          MoveTo (hdc, prect->right, (prect->bottom - prect->top)/2 );
  99.          LineTo (hdc, prect->left,  (prect->bottom - prect->top)/2 );
  100.          DeleteObject(SelectObject(hdc,GetStockObject(WHITE_PEN)));
  101.          MoveTo (hdc, prect->right, (prect->bottom - prect->top)/2+1 );
  102.          LineTo (hdc, prect->left,  (prect->bottom - prect->top)/2+1 );
  103.          DeleteObject(SelectObject(hdc,GetStockObject(BLACK_PEN)));
  104.         }
  105.      else if (pline3d->LineStyle == 2)
  106.         {
  107.          //vertikale 3D-Linie
  108.          DeleteObject(SelectObject(hdc,CreatePen(PS_SOLID,1,RGB(129,129,129))));
  109.          MoveTo (hdc, prect->right/2, prect->top);
  110.          LineTo (hdc, prect->right/2, prect->bottom);
  111.          DeleteObject(SelectObject(hdc,GetStockObject(WHITE_PEN)));
  112.          MoveTo (hdc, prect->right/2+1, prect->top);
  113.          LineTo (hdc, prect->right/2+1, prect->bottom);
  114.          DeleteObject(SelectObject(hdc,GetStockObject(BLACK_PEN)));
  115.         };
  116.     SelectObject(hdc, hbrOld);
  117.     return;
  118. }
  119.  
  120.  
  121. VOID NEAR RecalcArea
  122. (
  123.     PLINE3D pline3d,
  124.     HWND    hwnd
  125. )
  126. {
  127.     LPRECT   prect = &pline3d->rectDrawInto;
  128.  
  129.     GetClientRect(hwnd, prect);
  130.     return;
  131. }
  132.  
  133.  
  134.  
  135.  
  136.