TStatic |
Die Klasse TStatic repräsentiert Oberflächenelemente für statischen Text oder Grafiken. Statisch bedeutet, daß der Anwender mit diesen Elementen in der Regel nicht interagieren kann. Normalerweise wird TStatic für Text und Grafiken verwendet, welche nicht verändert werden sollen. Die Anwendung kann das statische Oberflächenelement aber durchaus verändern, um je nach Situation z.B. eine Änderung des Textes vorzunehmen.
Der Stil SS_NOTIFY ermöglicht das Versenden von Botschaften vom Kontrollelement an das übergeordnete Fenster.
Konstruktor zur direkten Erzeugung
Konstruktor zur Erzeugung aus einer Ressource
Standardattribute
Stilkonstanten
Beispielprogramm
Mausereignisse
Wichtige Elementfunktionen
Konstruktor zur direkten Erzeugung
TStatic(TWindow* parent, int id, const char far* title, int x, int y, int w, int h, uint textLimit = 0, TModule* module = 0);
Parameter | Bedeutung |
parent | Übergeordnetes Fenster. |
id | Eindeutige ID des Kontrollelements. Normalerweise wird der Wert -1 für statische Kontrollelemente verwendet. Wenn Sie aber z.B. via SendDlgItemMessage darauf zugreifen wollen, muß eine eindeutige ID verwendet werden. |
title | Text |
x,y | Position im Clientbereich des übergeordneten Fensters. |
w | Breite des Kontrollelements. |
h | Höhe des Kontrollelements. |
textLimit | Textlänge |
module | Zeiger auf die Modul- oder Anwendungsinstanz. |
Standardattribute
Attr.Style wird auf
WS_CHILD | WS_VISIBLE | WS_GROUP |
SS_LEFT
gesetzt.
Konstruktor zur Erzeugung aus einer Ressource
TStatic(TWindow* parent, int resourceId, uint textLimit = 0, TModule* module = 0);
Stilkonstanten
Statische Kontrollelemente können folgende Stile verwenden:
Konstante | Bedeutung |
SS_BITMAP | Gibt an, daß eine Bitmap im statischen Kontrollelement angezeigt wird. Der gegebene Text ist der Name der Bitmap, unter der diese irgendwo in einer Ressourcedatei enthalten ist. Die Parameter für Höhe und Breite werden bei Verwendung dieses Stils ignoriert, da das Kontrollelement automatisch die Anpassung zur Unterbringung der Bitmap erforderlichen Größe vornimmt. |
SS_BLACKFRAME | Feld mit einem Rahmen, der in der gleichen Farbe wie Fensterrahmen gezeichnet wird. Diese Farbe ist im standardmäßigen Windows Farbenschema schwarz. |
SS_BLACKRECT | Rechteck, das mit der aktuellen Fensterrahmen- Farbe gefüllt wird. Diese Farbe ist im standardmäßigen Windows Farbschema schwarz. |
SS_CENTER | Bestimmt ein einfaches Rechteck und zeigt den Text in diesem zentriert an. Der Text wird vor der Anzeige formatiert. Wörter die über das Zeilenende hinausgehen werden automatisch auf den Anfang der nächsten zentrierten Zeile umgebrochen. |
SS_CENTERIMAGE | Gibt an, daß bei einer Bitmap oder einem Icon die kleiner als der Clientbereich des Kontrollelements ist, der verbleibende Clientbereich mit der Farbe des Pixels in der linken oberen Ecke der Bitmap oder des Icon aufgefüllt wird. Wenn das statische Kontrollelement eine einfache Textzeile enthält, wird der Text vertikal im Clientbereich des Kontrollelements zentriert. |
SS_ENHMETAFILE | Gibt an, daß eine erweiterte Metadatei im Kontrollelement angezeigt wird. Der angegebene Text stellt dabei den Namen des Metadatei dar. Das Kontrollelement hat eine fixe Größe. |
SS_ETCHEDFRAME | Zeichnet den Rahmen des Kontrollelements unter Verwendung des Stils EDGE_ETCHED. |
SS_ETCHEDHORZ | Zeichnet die obere und untere Kante des Kontrollelements unter Verwendung des Stils EDGE_ETCHED. |
SS_ETCHEDVERT | Zeichnet die linke und rechte Kante des Kontrollelements unter Verwendung des Stils EDGE_ETCHED. |
SS_GRAYFRAME | Feld mit einem Rahmen in der gleichen Farbe wie der aktuelle Bildschirmhintergrund (Desktop) Diese Farbe ist im standardmäßigen Windows Farbenschema grau. |
SS_GRAYRECT | Rechteck das in der gleichen Farbe wie der aktuelle Bildschirmhintergrund (Desktop) gefüllt wird. Diese Farbe ist im standardmäßigen Windows Farbenschema grau. |
SS_ICON | Bestimmt, das ein Symbol angezeigt wird. Der gegebene Text ist der Name des Symbols der irgendwo in der Ressourcendatei definiert wurde. Die Parameter für Höhe und Breite werden ignoriert, da das Symbol seine Größe selbst festlegt. |
SS_LEFT | Einfaches Rechteck, das den Text linksbündig im Rechteck anzeigt. Der Text wird vor der Anzeige formatiert. Wörter, die über das Zeilenende hinausgehen würden, werden automatisch auf den Anfang der nächsten Zeile umgebrochen. |
SS_LEFTNOWORDWRAP | Einfaches Rechteck, das den Text linksbündig im Rechteck anzeigt. Tabulatorzeichen werden erweitert aber Wörter werden nicht umgebrochen. Text der über das Zeilenende hinausgeht wird abgeschnitten. |
SS_NOPREFIX | Normalerweise wird jedes "&" Zeichen im Text des Elements entfernt und der darauffolgende Buchstabe unterstrichen. Wenn dieser Stil angegeben wird, kann der Text auch das Zeichen "&" enthalten. Der Stil kann auch mit anderen kombiniert werden, zum Beispiel: SS_LEFT | SS_NOPREFIX |
SS_NOTIFY | Durch die Angabe dieses Stils werden an das übergeordnete Fenster die Benachrichtigungen STN_CLICKED, STN_DBLCLK, STN_DISABLE und STN_ENABLE gesendet. |
SS_OWNERDRAW | Bestimmt das das Kontrollelement zum Zeichnen verantwortlich ist. Das Besitzerfenster erhält einen WM_DRAWITEM Botschaft, wenn ein Zeichnen nötig wird. |
SS_REALSIZEIMAGE | Verhindert, daß ein Kontrollelement mit dem Stil SS_ICON oder SS_BITMAP seine Größe beim Laden oder Zeichnen ändert. Wenn das Icon oder Bitmap größer ist als der Zielbereich, wird das Bild abgeschnitten. |
SS_RIGHT | Einfaches Rechteck, das den Text rechtsbündig im Rechteck anzeigt. Text wird vor der Anzeige formatiert und Wörter die über das Zeilenende hinausgehen, werden automatisch in die nächste rechtsbündige Zeile umgebrochen. |
SS_RIGHTJUST | Bestimmt das die untere rechte Ecke des Kontrollelements bei Verwendung einer der Stile SS_BITMAP oder SS_ICON fest bleibt. Nur die obere und linke Seite werden zur Unterbringung einer neuen Bitmap oder eines neuen Icon angepaßt. |
SS_SIMPLE | Einfaches Rechteck, das den Text linksbündig im Rechteck anzeigt. Die Textzeile kann auf keinen Fall gekürzt oder verändert werden. Das übergeordnete Fenster oder Besitzerfenster des Elements darf die Botschaft WM_CTLCOLORSTATIC nicht bearbeiten! |
SS_SUNKEN | Zeichnet einen halb versunkenen Rahmen um das statische Kontrollelement. |
SS_WHITEFRAME | Feld mit einem Rahmen, der in der gleichen Farbe wie der Fensterhintergrund gezeichnet wird. Diese Farbe ist im standardmäßigen Windows Farbenschema weiß. |
SS_WHITERECT | Rechteck, das mit der gleichen Farbe wie der Fensterhintergrund gefüllt wird. Diese Farbe ist im standardmäßigen Windows Farbenschema weiß. |
Tabelle 1, SS_XXXX Konstanten
Beispiel
Sehen wir uns nun einmal ein Beispielprogramm an, in dem ein statisches Kontrollelement in einem Fenster verwendet wird. Wir benutzen dazu den Konstruktor zur direkten Erzeugung. Es enthält unter anderem aber auch noch ein paar besondere Fähigkeiten:
- Es legt die Fenstergröße so fest, daß das Fenster nur soweit in seiner Größe vermindert werden kann, daß unser Kontrollelement noch sichtbar bleibt. Möglich ist das durch das Abfangen der Botschaft WM_GETMINMAXINFO.
- Der Text wird geändert, wenn die linke oder rechte Maustaste betätigt wird.
// Beispielprogramm STATIC1 |
|
#include <owl/applicat.h> |
#include <owl/framewin.h> |
#include <owl/static.h> |
|
class CStatic1 : public TWindow { |
TStatic* pStaticText;
|
public:
|
CStatic1(TWindow* parent = 0);
|
protected:
|
void EvSize(uint sizeType, TSize& size);
|
void EvLButtonDown(uint modKeys, TPoint& point);
|
void EvLButtonUp(uint modKeys, TPoint& point);
|
void EvRButtonDown(uint modKeys, TPoint& point);
|
|
DECLARE_RESPONSE_TABLE(CStatic1);
|
}; |
|
DEFINE_RESPONSE_TABLE1(CStatic1,TWindow) |
EV_WM_SIZE,
|
EV_WM_LBUTTONDOWN,
|
EV_WM_LBUTTONUP,
|
EV_WM_RBUTTONDOWN,
|
END_RESPONSE_TABLE; |
|
CStatic1::CStatic1(TWindow* parent) : TWindow(parent) |
{ |
pStaticText = new TStatic ( this, -1, "Das ist ein statischer Text", 25, 20, 250, 20, 0);
|
|
// Text nicht linksbündig, sondern zentriert
|
pStaticText->Attr.Style &= ~SS_LEFT;
|
pStaticText->Attr.Style |= SS_CENTER ;
|
|
// Anfangsbreite und -höhe des Fenster festlegen
|
Attr.W = 250 + 50; Attr.H = 60;
|
} |
|
void CStatic1::EvSize(uint sizeType, TSize& size) |
{ |
TWindow::EvSize(sizeType, size);
|
|
//+++++++++++++++++++++++++++++++++++++++++++
|
// Das Kontrollelement an neue Fenstergröße anpassen
|
//+++++++++++++++++++++++++++++++++++++++++++
|
int middleX = size.cx / 2;
|
int middleY = size.cy / 2;
|
pStaticText->MoveWindow(middleX - 125, middleY - 10, 250, 20 , true);
|
} |
|
void CStatic1:: EvLButtonDown(uint modKeys, TPoint& point) |
{ |
TWindow::EvLButtonDown(modKeys, point);
|
pStaticText->SetText( "Die linke Maustaste wird gedrückt!");
|
} |
|
void CStatic1::EvLButtonUp(uint modKeys, TPoint& point) |
{ |
TWindow::EvLButtonUp(modKeys, point);
|
pStaticText->SetText("Das ist ein statischer Text");
|
} |
|
void CStatic1:: EvRButtonDown(uint modKeys, TPoint& point) |
{ |
TWindow::EvRButtonDown(modKeys, point);
|
pStaticText->SetText("Bitte linke Maustaste drücken.");
|
} |
|
class CFrame : public TFrameWindow { |
public:
|
CFrame(TWindow* parent, const char far *title = 0, TWindow* clientWnd = 0,
|
bool shrinkToClient = false, TModule* module = 0):
|
TFrameWindow(parent, title, clientWnd, shrinkToClient, module) ,
|
TWindow(parent, title, module) {}
|
|
protected:
|
void EvGetMinMaxInfo(MINMAXINFO far& MinMaxInfo);
|
|
DECLARE_RESPONSE_TABLE(CFrame);
|
}; |
|
DEFINE_RESPONSE_TABLE1(CFrame, TFrameWindow) |
EV_WM_GETMINMAXINFO,
|
END_RESPONSE_TABLE; |
|
void CFrame:: EvGetMinMaxInfo(MINMAXINFO far& MinMaxInfo) |
{ |
//+++++++++++++++++++++++++++
|
// Minimale Fenstergröße festlegen
|
//+++++++++++++++++++++++++++
|
MinMaxInfo.ptMinTrackSize.x = 250;
|
MinMaxInfo.ptMinTrackSize.y += 20;
|
} |
|
class CStatic1App : public TApplication { |
public:
|
CStatic1App() : TApplication() {}
|
void InitMainWindow() { SetMainWindow(new
|
CFrame(0, "Beispiel STATIC1", new CStatic1, true)); }
|
}; |
|
int OwlMain(int , char*[]) |
{ |
CStatic1App app; return app.Run();
|
} |
|
|
Hier sehen Sie unser Beispielprogramm. Es stellt ein Fenster dar, das ein statisches Kontrollelement mit einem Text enthält. Im Konstruktor von CStatic1 haben wir bestimmt, daß der Text nichts linksbündig, sondern zentriert dargestellt werden soll. Ferner wurde die anfängliche Fenstergröße festgelegt.
Wenn Sie nun die Größe des Fensters verändern, können Sie sehen, daß das Kontrollelement immer in der Mitte des Fensters erscheint. Dies hat aber nichts mit SS_CENTER zu tun. SS_CENTER dient nur der Zentrierung des Textes innerhalb des statischen Kontrollelements.
Die Elementfunktion EvSize ist zum Anpassen der Positionen unseres Kontrollelements verantwortlich. Windows sendet eine WM_SIZE Botschaft, nachdem die Fenstergröße geändert wurde. Wir nehmen diese also in die Antworttabelle von CStatic1 auf und fügen unserer Klasse, die damit korrespondierende Antwortfunktion zu. Diese ruft zuerst die Version des Vorgängers (TWindow) auf. Danach wird die neue Positionen errechnet und das Fenster mit der MoveWindow() Elementfunktion an die neue Position verschoben.
Nachfolgend sehen Sie unser Fenster für das Beispielprogramm STATIC1 mit der kleinstmöglichen Ausdehnung des Fensters. Weiter verkleinern läßt sich das Fenster nicht. Es kann aber zu einem Icon verkleinert werden.
Die Lösung dazu liegt in der Elementfunktion EvGetMinMaxInfo der Klasse CFrame und einem Eintrag in der Botschaftstabelle, der die Antwortfunktion mit dem Botschaftscode verbindet.
Für ptMinTrackSize setzen wir den Wert 250, was der Breite unseres statischen Kontrollelements entspricht. Zu der von Windows vorgegebenen minimalen Höhe eines Fensters (Rahmen + Titelleiste), addieren wir zu ptMinTrackSize die Höhe unseres Kontrollelements.
Mausereignisse
Die Funktionen EvLButtonDown, EvLButtonUp und EvRButtonDown behandeln Mausereignisse.
- EvLButtonDown wird aufgerufen, wenn die linke Maustaste betätigt wird und ändert mit einem Aufruf der Funktion SetText den Text des statischen Kontrollelements:
- EvLButtonUp wird aufgerufen, wenn die linke Maustaste losgelassen wird und setzt unseren ursprünglichen Text.
- EvRButtonDown wird aufgerufen, wenn die rechte Maustaste betätigt wird und setzt ebenfalls einen Text, der aber solange erhalten bleibt, bis die linke Maustaste wieder betätigt wird.
Experimentieren Sie ein wenig mit diesem Programm und den verschiedenen Stilen herum. Verwenden Sie beispielsweise einmal den Stil SS_SIMPLE um herauszufinden, wie die Ausgabe des Programms dann aussieht.
Wichtige Elementfunktionen der Klasse TStatic
void Clear();
Löscht den Text des statischen Kontrollelementes.
HICON GetIcon() const;
Liefert das Handle des vom Kontrollelement benutzten Icon zurück.
int GetText(char far* str, int maxChars);
Holt Text und speichert ihn in str. maxChars gibt an, wieviel Zeichen maximal kopiert werden sollen. Die Funktion liefert die Anzahl der kopierten Zeichen zurück.
HICON SetIcon(HICON);
Setzt das Icon-Handle für das Kontrollelement.
void SetText(const char far* str);
Setzt den Text des statischen Kontrollelements auf den in str angegebenen String.
Stand: 16.01.99 14:52:38
© 1998,1999 by Hans Joachim Kiefer, hajokiefer@handshake.de