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