OWL Fensterprogrammierung

Willemers Informatik-Ecke

Erzeugen und Starten eines Standardfensters

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);
} 

Größenänderungen

Zunächst wird eine Memberfunktion definiert, die Größenänderungen empfängt (EvSize).

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.

Dialog wird nicht erzeugt

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.


Homepage 22.9.2001 (C) Copyright 1999, 2001 Arnold Willemer