OWL Dialoge |
Dabei ist CmAbout die Funktion, die dem WM_COMMAND hinterlegt wird.
Ist die Klasse, die diese Nachricht bearbeitet eine von TWindow abgeleitete,
kann statt GetMainWindow() auch this verwendet werden.
Hält man die Variable OpenData global, merkt sich diese die zuletzt
bearbeitete Datei und Position.
Analog gibt es auch einen Dialog zum Sichern der Datei.
Minimalcode zum Erzeugen einer Dialogbox
Die Dialogbox wird im Workshop definiert und habe die ID IDD_ABOUT.
Sie kann aufgerufen werden durch
void TMyApp::CmAbout() {
TDialog(GetMainWindow(), IDD_ABOUT).Execute();
}
Dialog zum Öffnen und Sichern einer Datei
static TFileOpenDialog::TData OpenData(OFN_FILEMUSTEXIST,
"All Files (*.*)|*.*|Text Files (*.txt)|*.txt|CD-Inhalt (*.cd)|*.cd",
0, "", "*");
TFileOpenDialog *OpenDialog;
OpenDialog = new TFileOpenDialog(this, OpenData, 0, "Datei lesen");
if (OpenDialog->Execute()==IDOK) {
// Datei wurde ausgewählt
// Dateiname mit Pfad befindet sich in OpenData.FileName
}
TFileSaveDialog::TData SaveData;
TFileSaveDialog SaveDialog(this, SaveData, 0, "Exportieren");
if (SaveDialog.Execute()==IDOK) {
fp = fopen(SaveData.FileName, "w");
In diesem Fall wurde die TData-Variable nicht vorbelegt.
Schriftauswahl-Dialog
#include <owl\choosefo.h> ... ... TChooseFontDialog::TData FontData; TChooseFontDialog *FontDialog; static int FontSize = 0; static char FontName[80] = ""; static TFont *MyFont = 0; FontData.Flags = CF_SCREENFONTS; // CF_PRINTERFONTS CF_BOTH if (FontSize) { strcpy(FontData.LogFont.lfFaceName, FontName); FontData.PointSize = FontSize*10; FontData.Flags |= CF_INITTOLOGFONTSTRUCT; } FontDialog = new TChooseFontDialog(this, FontData, 0, "Schrift-Auswahl"); if (FontDialog->Execute()==IDOK) { strcpy(FontName, FontData.LogFont.lfFaceName); FontSize = FontData.PointSize/10; . . . } delete FontDialog; }
Der Aufruf FontDialog->Execute bewirkt, daß aus der Benutzer einen Fontdialog bekommt. Die Daten werden in der FontData-Struktur abgelegt. Die wichtigen Daten sind der "Facename" und die Größe in Punkt (nicht in Pixeln!). Voraussetzung, daß der Fontdialog überhaupt startet, ist die Belegung des FontData.Flags mit einer FONT-Option. Fehlt dieser Eintrag, behauptet Windows, es wären keine Fonts installiert.
Um die Dialogbox vorzubesetzen, muß das Flag CF_INITTOLOGFONTSTRUCT enthalten. Dann werden die Daten aus LogFont verwendet. Unter OS/2 scheint es einen Fehler im OWL zu geben, der verhindert, daß die Punktgröße vorbelegt werden kann. Sollte ich mich irren oder jemand einen guten Workaround haben, bitte eine Mail an mich.
Mit den Informationen kann ein TFont gebildet werden und dann auf Grafiken oder Kontrollelementen angewandt werden.
TChooseColorDialog::TData choose; static TColor custColors[16] = { 0x010101L, 0x101010L, 0x202020L, 0x303030L, 0x404040L, 0x505050L, 0x606060L, 0x707070L, 0x808080L, 0x909090L, 0xA0A0A0L, 0xB0B0B0L, 0xC0C0C0L, 0xD0D0D0L, 0xE0E0E0L, 0xF0F0F0L }; choose.Flags = CC_RGBINIT; choose.Color = Color; choose.CustColors = custColors; if (TChooseColorDialog(this, choose).Execute() == IDOK) { Color = choose.Color; }
Homepage - OWL-Index | 22.9.2001 (C) Copyright 1999, 2001 Arnold Willemer |