home *** CD-ROM | disk | FTP | other *** search
- // Frame.c - Steuerelementkontrollprozedur FRAME
- // Autor: Dipl.-Ing. Andreas Maslo
-
- #define NOCOMM
- #include <windows.h>
-
- #include <vbapi.h>
- #include <string.h>
- #include "line3d.h"
-
- // lokale Prototypen
- VOID NEAR DrawBack(PLINE3D pline3d, HWND hwnd, HDC hdc);
- VOID NEAR RecalcArea(PLINE3D pline3d, HWND hwnd);
-
- // Line3D-Kontrollprozedur
- LONG FAR PASCAL _export Line3dCtlProc
- (
- HCTL hctl,
- HWND hwnd,
- USHORT msg,
- USHORT wp,
- LONG lp
- )
- {
- PLINE3D pline3d = NULL;
- HDC hdc;
- LPRECT prect = &pline3d->rectDrawInto;
-
- switch (msg)
- {
- case WM_CREATE:
- pline3d = (PLINE3D)VBDerefControl(hctl);
- pline3d->LineStyle = 1;
- VBSetControlProperty(hctl, IPROP_LINE3D_BACKCOLOR, RGB(192, 192, 192));
- break;
- case WM_PAINT:
- pline3d = (PLINE3D)VBDerefControl(hctl);
- if (wp)
- DrawBack(pline3d, hwnd, (HDC)wp);
- else
- {
- PAINTSTRUCT ps;
- BeginPaint(hwnd, &ps);
- DrawBack(pline3d, hwnd, ps.hdc);
- EndPaint(hwnd, &ps);
- }
- break;
- case WM_SIZE:
- pline3d = (PLINE3D)VBDerefControl(hctl);
- RecalcArea(pline3d, hwnd);
- break;
- case VBM_SETPROPERTY:
- //benutzerdefinierte Eigenschaften
- switch (wp)
- {
- case IPROP_LINE3D_LINESTYLE:
- //Rahmenstil wurde gewechselt
- pline3d = (PLINE3D)VBDerefControl(hctl);
- pline3d->LineStyle = (ENUM)lp;
- InvalidateRect(hwnd, prect, FALSE);
- break;
- }
- break;
- }
- //alles weitere an Visual Basic weiterleiten
- return VBDefControlProc(hctl, hwnd, msg, wp, lp);
- }
-
-
- //Zeichnen des Steuerelementes
- //Aufruf erfolgt durch Botschaft WM_PAINT
- VOID NEAR DrawBack
- (
- PLINE3D pline3d,
- HWND hwnd,
- HDC hdc
- )
- {
- HBRUSH hbr;
- HBRUSH hbrOld = NULL;
- LPSTR lpstr;
- LPRECT prect = &pline3d->rectDrawInto;
-
- HFONT hfontOld;
- HPEN hPen;
-
- //Rechteck ausfâżllen und mit selber Farbe umranden
- hbr = (HBRUSH)SendMessage(GetParent(hwnd), WM_CTLCOLOR,
- hdc, MAKELONG(hwnd, 0));
- hPen=SelectObject(hdc,CreatePen(PS_SOLID,1,RGB(192,192,192)));
- hbrOld = SelectObject(hdc, hbr);
- Rectangle(hdc, prect->left, prect->top, prect->right, prect->bottom);
- //Linie zeichen
- if (pline3d->LineStyle == 1)
- {
- //horizontale 3D-Linie
- DeleteObject(SelectObject(hdc,CreatePen(PS_SOLID,1,RGB(129,129,129))));
- MoveTo (hdc, prect->right, (prect->bottom - prect->top)/2 );
- LineTo (hdc, prect->left, (prect->bottom - prect->top)/2 );
- DeleteObject(SelectObject(hdc,GetStockObject(WHITE_PEN)));
- MoveTo (hdc, prect->right, (prect->bottom - prect->top)/2+1 );
- LineTo (hdc, prect->left, (prect->bottom - prect->top)/2+1 );
- DeleteObject(SelectObject(hdc,GetStockObject(BLACK_PEN)));
- }
- else if (pline3d->LineStyle == 2)
- {
- //vertikale 3D-Linie
- DeleteObject(SelectObject(hdc,CreatePen(PS_SOLID,1,RGB(129,129,129))));
- MoveTo (hdc, prect->right/2, prect->top);
- LineTo (hdc, prect->right/2, prect->bottom);
- DeleteObject(SelectObject(hdc,GetStockObject(WHITE_PEN)));
- MoveTo (hdc, prect->right/2+1, prect->top);
- LineTo (hdc, prect->right/2+1, prect->bottom);
- DeleteObject(SelectObject(hdc,GetStockObject(BLACK_PEN)));
- };
- SelectObject(hdc, hbrOld);
- return;
- }
-
-
- VOID NEAR RecalcArea
- (
- PLINE3D pline3d,
- HWND hwnd
- )
- {
- LPRECT prect = &pline3d->rectDrawInto;
-
- GetClientRect(hwnd, prect);
- return;
- }
-
-
-
-
-