OWL Fensterprogrammierung |
Wie im normalen API unterscheidet auch die OWL zwischen Rahmen- und Clientfenster. Das Rahmenfenster kann dekoriert sein (Statusbalken) oder ein MDI-Rahmen sein. Der Inhalt ist ein von TWindow direkt abgeleitetes Fenster.
Das Elternfenster eines Rahmenfensters ist normalerweise 0 und damit der Desktop.
tFrameWindow *TextFenster;
TextFenster = new tTextWindowFrame(0, "Betrachter",
new tTextWindow(...));
TextFenster->Create();
TextFenster->ShowWindow(SW_SHOWNORMAL);
Im Konstruktor ist der Aufruf von Init notwendig.
tTextWindow::tTextWindow(char *Name, long pvon, long pbis)
{
Init(0, 0, 0);
TextView = new TEdit(this, 100, "", 2,2,100,100, MAXTEXTLEN, true);
}
class tTextWindow : public TWindow {
public:
...
private:
void EvSize(unsigned int, TSize&);
...
DECLARE_RESPONSE_TABLE(tTextWindow);
};
DEFINE_RESPONSE_TABLE1(tTextWindow, TWindow)
EV_WM_SIZE,
END_RESPONSE_TABLE;
void tTextWindow::EvSize(unsigned int, TSize& newSize)
// Die Textfeld soll mit dem Fenster mitwachsen
{
#ifdef __OS2__
TRect Rect;
this->GetClientRect(Rect);
newSize.cx = Rect.right-Rect.left;
newSize.cy = Rect.bottom-Rect.top;
#endif
EditFenster->MoveWindow(0, 0, newSize.cx, newSize.cy);
// die restlichen Striche wegmachen und die Scrollbars wieder richten...
Invalidate();
}
Hier wird ein Multiline-Edit an die Größe des Rahmenfensters angepaßt.
WM_SIZE, das auslösende Ereignis, erscheint einmal direkt nach Erzeugung des
Fensters und dann bei jeder Größenänderung.
Unter OS/2 scheint die EvSize speziell bei nachträglichen
Größenänderungen einige Probleme mit dem Parameter zu haben.
Man kann das Problem umgehen, indem man, wie oben demonstriert, noch einmal
explizit das Client-Rechteck einliest.
Typischerweise erzeugt der Resource-Workshop statt einem Standard-Button
ein Borland Control. Sollte eine Dialogbox nicht starten, sollte der
RC-File auf Borland-Controls abgesucht werden.
Dialog wird nicht erzeugt
| Homepage | 22.9.2001 (C) Copyright 1999, 2001 Arnold Willemer |