SDevice

Verwaltet das "Darstellungs-Gerät". [Mehr ...]

Vererbung

Basisklassen(n)   abgeleitete Klassen
  SDevice
SImagePaintDevice

Attribute

public:

Attribut Typ Beschreibung
currentPaintRect SRect Das Rechteck, in dem aktuell gezeichnet werden soll.
Es steht innerhalb der onPaint()-Funktion zur Verfügung und beinhaltet logische Koordinaten.
hdc HDC Device-Handle
hwnd HWND Fenster-Handle
lastPaintRect SRectc Rechteck dass alle bisherigen Zeichenopereationen umschließt, seit dem letzten beginPaint()
noFlicker BOOL wenn true wird aus einem parallelem DC gezeichnet und das ergebnis transferiert, so dass der Zeichenprozess (=Flackern) nicht sichtbar ist. Es sollte vor der Erzeugung des Fensters (z.B. in onPreCreateWindow) gesetzt werden.
ps PAINTSTRUCT WIindows-API-Struktur für Zeichenfunktionen.
pWindow class SWindow* Zeiger auf das Fenster, das gezeichnet werden soll.
status DWORD Enthält verschiedene Statusinformationen.
Kombination aus:
  • SDEV_NO_FONT_SELECT
  • SDEV_EXTERN_HDC
textColor COLORREF Die Farbe desTextes
textColorBack COLORREF Texthintergrundfarbe

protected:

Attribut Typ Beschreibung
backgroundBrush HBRUSH Handle der Hintergrundfarbe
backgroundColor COLORREF Hintergrundfarbe des Devices
brush HBRUSH Brush-Handle (enthält Füllfarbe)
brushData COLORREF Füllfarbe des Gerätes
font HFONT Schriftart-Handle
fontData LOGFONT Die Schriftart.
graphicsMode int
  • GM_COMPATIBLE = Standard
  • GM_ADVANCED = benutzt WorldTransformation
mapMode int Ist der beim Zeichen einzustellender MapMode. Er wird bei Beginn jedes Zeichnens festgelegt.
noFlickerHBitmap HBITMAP HBITMAP des noFlicker-HDC
noFlickerHBitmap_old HBITMAP gerettetes HBITMAP
noFlicker_paintRect RECT
noFlicker_realHDC HDC der eigentliche HDC während des noFlicker-Zeichnens
offsetX int letzte X-Koordinate
offsetY int letzte Y-Koordinate
old_fontData LOGFONT alte, gespeicherte Schriftart
pen HPEN Zeichenstift-Handle
penData LOGPEN Der Zeichenstift, enthält Breite, Höhe, Farbe und Style des Stiftes.
savedDC int Zwischengespeicherte Zeichenumgebung eines Fensters.
textBrush HBRUSH Brush-Handle, Handle der Textfarbe
zoomX float Horizontaler Zoomfaktor für metrische MapMode. Kein Zoom = 1.
zoomY float Horizontaler Zoomfaktor für metrische MapMode. Kein Zoom = 1.

Operationen

public:

Name Parameter Rückgabewert Beschreibung
beginPaint HDC takeHDC=NULL void Dient zur Vorbereitung des Zeichens und wird automatisch innerhalb von WM_PAINT behandelt.
bezier const SPoint& start,
const SPoint& end,
const SPoint& control1,
const SPoint& control2,
int width=SDEV_NOCHANGE,
COLORREF color=SDEV_NOCHANGE
void Zeichnet eine Bezier-Kurve.
calcDeviceToLogicalPoint const SPoint &device SPoint Berechnet aus einem Device-Punkt den logischen Punkt.
calcDeviceToLogicalRect const SRect &device SRect Berechnet aus einem Device-Rect das logische Rect.
calcDeviceToLogicalX int device int Berechnet aus einem Device-X-Wert den logischen X-Wert.
calcDeviceToLogicalY int device int Berechnet aus einem Device-Y-Wert den logischen Y-Wert.
calcLogicalToDevicePoint const SPoint &logical SPoint Berechnet aus einem Logischen-Punkt den Device-Punkt.
calcLogicalToDeviceRect const SRect &logical SRect Berechnet aus einem logischen Rect das Device-Rect.
calcLogicalToDeviceX int logical int Berechnet aus einem logischen X-Wert den Device-X-Wert.
calcLogicalToDeviceY int logical int Berechnet aus einem logischen Y-Wert den Device-Y-Wert.
drawText SRect rect,
const SString& text,
const SString& format="ltwe"
int Zeichnet Text in einem Rechteck.
ellipse SRect rect,
COLORREF pen=SDEV_NOCHANGE ,
COLORREF fill=SDEV_NOCHANGE
void Zeichnet eine Ellipse
endPaint void Dient zum Abschluß des Zeichens und wird automatisch innerhalb von WM_PAINT behandelt.
fillRectangle SRect rect,
COLORREF fill=SDEV_NOCHANGE
void Füllt einen rechteckigen Bereich.
getBackgroundColor COLORREF Liefert die aktuelle Hintergrundfarbe des Devices.
getFont HFONT
getGraphicsMode int Gibt den Grafikmode zurück.
getLineHeight BOOL includingRowSpace=true int Ermittelt die Zeilenhöhe des aktuell eingestellten Fonts.
getMapMode int Gibt den aktuellen MapMode zurück, siehe setMapMode()
getMaxCharSize SSize Ermittelt die maximale Zeichengröße des aktuellen Fonts.
getOffsetX int Gibt den aktuell eingestellten Offset zurück.
getOffsetY int Gibt den aktuell eingestellten Offset zurück.
getStatus DWORD
getTextBrush HBRUSH Gibt einen Brush mit der Text-Hintergundfarbe zurück.
getTextSize const SString& text SSize Ermittelt die Ausdehnung eines Strings wenn er ausgegeben würde.
getZoomX float Gibt den aktuellen Zoom in X-Richtung zurück..
getZoomY float Gibt den aktuellen Zoom in Y-Richtung zurück..
line int x1,
int y1,
int x2,
int y2,
COLORREF color=SDEV_NOCHANGE
void Zeichnet eine Linie in der angegebenen Farbe.
pie SRect bound,
int startArc,
int endArc,
int direction=AD_CLOCKWISE,
int size=1,
COLORREF border=SDEV_NOCHANGE,
COLORREF fill=SDEV_NOCHANGE
void Zeichnet einen Kreisausschnitt.
polygon SPointList& points,
COLORREF pen=SDEV_NOCHANGE,
COLORREF fill=SDEV_NOCHANGE
void
rectangle SRect rect,
COLORREF pen=SDEV_NOCHANGE,
COLORREF fill=SDEV_NOCHANGE
void Zeichnet ein Rechteck.
roundRect SRect rect,
SSize ellipse,
COLORREF pen=SDEV_NOCHANGE,
COLORREF fill=SDEV_NOCHANGE
void zeichnet ein Rechteck mit abgerundeten Ecken
setBackgroundColor COLORREF backColor void Legt die Hintergrundfarbe des Fensters fest
setBold BOOL bold=true void Setzt die Schriftstärke.
setBrush COLORREF color void setzt die Füllfarbe
setCurrentBrush void Aktiviert den aktuellen Brush.
setCurrentFont void Aktiviert die aktuelle Schriftart.
setCurrentPen void Aktiviert den aktuellen Pen.
setFont const SString& name="",
int size=SDEV_NOCHANGE,
int underline=SDEV_NOCHANGE ,
int italic=SDEV_NOCHANGE ,
int weight=SDEV_NOCHANGE
void Legt die Standard-Schriftart für dieses Fenster fest.
setMapMode int mapmode=MM_HIMETRIC,
int graphicsmode=SDEV_AUTO
void Diese Funktion merkt sich den bei beginPaint zu setzenden MapMode und GraphicsMode.
setOffset int offsetX=SDEV_NOCHANGE,
int offsetY=SDEV_NOCHANGE
void Setzt den Ausgabe-Offset, d.h. eine Verschiebung.
setPen COLORREF color,
int width=1,
int style=PS_SOLID
void Wählt einen Stift aus.
setTextColor COLORREF text=SDEV_NOCHANGE,
COLORREF back=SDEV_NOCHANGE
void Verändert die Textfarbe und die Texthintergrundfarbe
setZoom float zoomX, float zoomY void Setzt den aktuellen Zoom.
setZoom float zoom void Setzt den aktuellen Zoom.
textOut int x,
int y,
const SString& text
void gibt einen String auf dem Device aus
textOut int x,
int y,
char* pText,
int count
void Gibt einen String auf dem Device aus.

protected:

Name Parameter Rückgabewert Beschreibung
addLastPaintRect SRectc rect void fügt das Rechteck zum lastPaintRect hinzu
addLastPaintRect const SPoint point void fügt den Punkt zum lastPaintRect hinzu
init void initialisiert das Device
setZoomAndOffsetOnDC HDC useHdc=NULL void Wendet entsprechend des Grafic- und MapMode die Transformationen an, wenn der DC vorhanden ist.
startPaint HDC useHdc=NULL void Stellt Modes ein und rettet den DC
stopPaint HDC useHdc=NULL void Beendet die Zeichenfunktionen, stellt den DC wieder her.
tempBrushColor COLORREF color=SDEV_RESTORE void Ändert die Farbe temporär und stellt sie wieder her.
tempPenColor COLORREF color=SDEV_RESTORE void Ändert die Farbe temporär und stellt sie wieder her.

Detailbeschreibung SDevice

Verwaltet das "Darstellungs-Gerät".


Diese Klasse verwaltet die Darstellung eines Objektes auf einem Ausgabegerät. Dieses Gerät ist in der Regel der Bildschirm, es kann sich allerdings auch um ein anderes Ausgabegerät z.B. den Drucker handeln.
Jedes sichtbare Objekt der SVL enthält ein Objekt dieser Klasse, das über die Membervariable 'screen' angesprochen werden kann. Dieses Objekt steuert die Bildschirmausgabe des Fensters, Steuerelements, ....
Es gibt zwei Verwendungsmöglichkeiten für das screen-Objekt einer Klasse.

Beispiel: Änderung der Standardwerte von Fenster-Objekten

Für die üblichen Veränderungen am Aussehen eines Fensters/Controls/... stehen eine Reihe von Funktionen zur Verfügung. Mit diesen sollte vor dem Erstellen das Erscheinungsbild eingestellt werden. Bei Controls wäre das in der 'onInitWindow()'-Funktion vor dem Aufruf von 'createCtrl(...)'. Für Fenster können diese Zuweisungen in 'onPreCreateWindow()' erfolgen.

SEdit editText;
// Schriftart ändert
// setFont(schriftart,schriftgröße,unterstrichen,kursiv,fett)
editText.screen.setFont("Arial",16,SDEV_NOCHANGE,SDEV_NOCHANGE,SDEV_NOCHANGE);
// fette Schrift
editText.screen.setBold(true);
// textfarbe und texthintergrundfarbe
// gelb auf blau
editText.screen.setTextColor(RGB(255,255,0),RGB(50,50,200));
// Erzeugen des Edits
editText.createCtrl(this,"testtext",20,20);
BSP: selber zeichnen
Es ist natürlich auch Möglich selbst auf dem Device zu zeichnen. Dazu muss in einer abgeleiteten Klasse die Funktion 'onPaint()' überschrieben werden.
MyClass::onPaint(SDevice& screen)
{
  ...
  /// ein Rechteck
  screen.rectangle( rect1, RGB( 0,0,255 ),RGB( 0,255,255));
  /// eine Ellipse
  screen.ellipse( rect2, RGB( 100,100,255 ),RGB( 0,0,255));
  ...
}

Funktionsbeschreibungen

addLastPaintRect(SRectc rect) void

fügt das Rechteck zum lastPaintRect hinzu

addLastPaintRect(const SPoint point) void

fügt den Punkt zum lastPaintRect hinzu

beginPaint(HDC takeHDC=NULL) void

Dient zur Vorbereitung des Zeichens und wird automatisch innerhalb von WM_PAINT behandelt.

Dies ist eine interne SVL-Funktion und muss durch den Benutzer der SVL nicht bedient werden.

Parameter:

takeHDC HDC der abweichend verwendet werden soll

bezier(const SPoint& start, const SPoint& end, const SPoint& control1, const SPoint& control2, int width=SDEV_NOCHANGE, COLORREF color=SDEV_NOCHANGE) void

Zeichnet eine Bezier-Kurve.

Parameter:

start Startpunkt
end Endpunkt
control1 1. Steuerungspunkt der Kurve
control2 2. Steuerungspunkt der Kurve
width Linienbreite
color Linienfarbe

calcDeviceToLogicalPoint(const SPoint &device) SPoint

Berechnet aus einem Device-Punkt den logischen Punkt.

calcDeviceToLogicalRect(const SRect &device) SRect

Berechnet aus einem Device-Rect das logische Rect.

calcDeviceToLogicalX(int device) int

Berechnet aus einem Device-X-Wert den logischen X-Wert.

calcDeviceToLogicalY(int device) int

Berechnet aus einem Device-Y-Wert den logischen Y-Wert.

calcLogicalToDevicePoint(const SPoint &logical) SPoint

Berechnet aus einem Logischen-Punkt den Device-Punkt.

calcLogicalToDeviceRect(const SRect &logical) SRect

Berechnet aus einem logischen Rect das Device-Rect.

calcLogicalToDeviceX(int logical) int

Berechnet aus einem logischen X-Wert den Device-X-Wert.

calcLogicalToDeviceY(int logical) int

Berechnet aus einem logischen Y-Wert den Device-Y-Wert.

drawText(SRect rect, const SString& text, const SString& format="ltwe") int

Zeichnet Text in einem Rechteck.

Parameter:

rect Rechteck in dem gezeichnet wird
text auszugebender Text, mehrzeilig mit \r\n umgebrochen
format Art der Ausgabe:
  • t -> top
  • l -> left
  • r -> right
  • b -> bottom
  • v -> vertikal zentriert -> erzwingt einzeilig
  • h -> horizontal zentriert
  • w -> wortumbruch
  • e -> einkürzen von zu langen Worten (ellipsis)

ellipse(SRect rect, COLORREF pen=SDEV_NOCHANGE , COLORREF fill=SDEV_NOCHANGE) void

Zeichnet eine Ellipse

in der angegebenen Farbe, mit der angegebenen Füllfarbe

Parameter:

rect Rechteck in dem die Ellipse gezeichnet werden soll
pen Zeichenfarbe (Randfarbe)
fill Füllfarbe

endPaint() void

Dient zum Abschluß des Zeichens und wird automatisch innerhalb von WM_PAINT behandelt.

Dies ist eine interne SVL-Funktion und muss durch den Benutzer der SVL nicht bedient werden.

fillRectangle(SRect rect, COLORREF fill=SDEV_NOCHANGE) void

Füllt einen rechteckigen Bereich.

Parameter:

rect Position und Größe des Rechteckes
fill Füllfarbe wenn SDEV_NOCHANGE dann aktuelle Füllfarbe

getBackgroundColor() COLORREF

Liefert die aktuelle Hintergrundfarbe des Devices.

Rückgabe:

COLORREF Hintergrundfarbe

getFont() HFONT

Rückgabe:

HFONT die aktuelle Schrift

getGraphicsMode() int

Gibt den Grafikmode zurück.

getLineHeight(BOOL includingRowSpace=true) int

Ermittelt die Zeilenhöhe des aktuell eingestellten Fonts.

Parameter:

includingRowSpace Zeilenhöhe wird inklusive des Zeilenabstandes errechnet

Rückgabe:

int Zeilenhöhe

getMapMode() int

Gibt den aktuellen MapMode zurück, siehe setMapMode()

getMaxCharSize() SSize

Ermittelt die maximale Zeichengröße des aktuellen Fonts.

Dabei beeinflußt der MapMode (u.a. der Zoom) das Ergebnis.
Diese Funktion kann außerhalb einer onPaint-Funktion aufgerufen werden.

Rückgabe:

SSize maximale Zeichengröße in logischen Einheiten.

getOffsetX() int

Gibt den aktuell eingestellten Offset zurück.

getOffsetY() int

Gibt den aktuell eingestellten Offset zurück.

getStatus() DWORD

Rückgabe:

DWORD status des Devices

getTextBrush() HBRUSH

Gibt einen Brush mit der Text-Hintergundfarbe zurück.

Für die Erzeugung und Freigabe des Brush sorgt diese Klasse.

Rückgabe:

HBRUSH Brush des Text-Hintergrundes

getTextSize(const SString& text) SSize

Ermittelt die Ausdehnung eines Strings wenn er ausgegeben würde.

Parameter:

text String dessen Ausdehnung ermittelt werden soll

Rückgabe:

SSize Ausdehnung des Strings

getZoomX() float

Gibt den aktuellen Zoom in X-Richtung zurück..

Rückgabe:

zoomX horizontaler Zoomfaktor

getZoomY() float

Gibt den aktuellen Zoom in Y-Richtung zurück..

Rückgabe:

zoomX vertikaler Zoomfaktor

init() void

initialisiert das Device

line(int x1, int y1, int x2, int y2, COLORREF color=SDEV_NOCHANGE) void

Zeichnet eine Linie in der angegebenen Farbe.

Es wird eine Linie zwischen den beiden Punkten (x1, y1) und (x2, y2) gezeichnet.

Parameter:

x1 X-Koordinate des 1. Punktes
y1 Y-Koordinate des 1. Punktes
x2 X-Koordinate des 2. Punktes
y2 Y-Koordinate des 2. Punktes
color Linienfarbe, wenn nicht angegeben wird die zuvor verwendete Pen-Farbe benutzt.

pie(SRect bound, int startArc, int endArc, int direction=AD_CLOCKWISE, int size=1, COLORREF border=SDEV_NOCHANGE, COLORREF fill=SDEV_NOCHANGE) void

Zeichnet einen Kreisausschnitt.

Die Größe des Kreises/der Ellipse wird durch das umschließende Rechteck (bound) festgelegt. Durch die beiden Winkel 'startArc' und 'endArc' wird der Teil des Kreises der zu sehen ist festgelegt. Die Winkel werden von '12 Uhr' aus gemessen.

Parameter:

bound umgebendes Rechteck (Ist dieses Rechteck ein Quadrat entsteht ein Kreis sonst eine Ellipse)
startArc Startwinkel des Kreisausschnitts (beginnt bei '12Uhr')
endArc Endwinkel des Kreisausschnitts (beginnt bei '12Uhr')
direction Zeichenrichtung
  • AD_CLOCKWISE -> im Uhrzeigersinn
  • AD_COUNTERCLOCKWISE -> gegen den Uhrzeigersinn
size Linienstärke in Pixel
border Linienfarbe
fill Füllfarbe

polygon(SPointList& points, COLORREF pen=SDEV_NOCHANGE, COLORREF fill=SDEV_NOCHANGE) void

rectangle(SRect rect, COLORREF pen=SDEV_NOCHANGE, COLORREF fill=SDEV_NOCHANGE) void

Zeichnet ein Rechteck.

Parameter:

rect Position und Größe des Rechteckes
pen Zeichenfarbe (Rahmenfarbe) SDEV_NOCHANGE dann aktuelle Zeichenfarbe
fill Füllfarbe wenn SDEV_NOCHANGE dann aktuelle Füllfarbe

roundRect(SRect rect, SSize ellipse, COLORREF pen=SDEV_NOCHANGE, COLORREF fill=SDEV_NOCHANGE) void

zeichnet ein Rechteck mit abgerundeten Ecken

Parameter:

rect Größe und Position des zu zeichnenden Rechtecks
ellipse x und y der zur Rundung zu verwendenden Ellipse
pen Zeichenfarbe SDEV_NOCOLOR dann aktuelle Farbe
fil Hintergrundfarbe SDEV_NOCOLOR dann aktuelle Farbe

setBackgroundColor(COLORREF backColor) void

Legt die Hintergrundfarbe des Fensters fest

setBold(BOOL bold=true) void

Setzt die Schriftstärke.

Parameter:

bold wenn true wird fett ausgewählt (FW_BOLD), wenn false wird normal ausgewählt (FW_NORMAL)

setBrush(COLORREF color) void

setzt die Füllfarbe

Parameter:

color neue Füllfarbe SDEV_NOCOLOR setzt Transparente Füllung

setCurrentBrush() void