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 |