Dialogfeld in SDI anzeigen lassen

untread

Erfahrenes Mitglied
Hallo, ich bekomme es einfach nicht hin ein normales Dialogfeld in einer SDI Anwendung anzeigen zu lassen.

Dieses Dialogfeld soll so eine Art Toolbox darstellen (mit Buttons, Radiobuttons usw) so wie eine Werkzeugbox eben.

Wie geh ich das jetzt am besten an ? (Hab mir zwar zum Thema modulare und nichtmodulare Dialogfelder einiges angeschaut aber irgendwie war dort nicht das beschrieben was ich suche)

mfg Harry
 
Ja was suchst du denn? Der Vorgang ist eigentlich immer derselbe. Du erstellst im Ressourcen-Editor deinen Dialog mit den Steuerelementen. Dann werden den Steuerelementen die benötigten Variablen zugeordnet. Anschließend erstellst du daraus eine Klasse, nehmen wir mal an, du nennst sie CMyDialog.
In der Klasse, wo du den Dialog brauchst, erstellst du ein Objekt der Klasse, initialisierst die Steuerelemente und zeigst den Dialog mit DoModal an.
Code:
CMyDialog dlg;    //Objekt erstellen
//Hier eventuell die Steuerelemente initialisieren
if(dlg.DoModal==IDOK)   //Dialog anzeigen
{
   //Hier die Variablen auswerten
}

Mfg

langer
 
Hi,
probiers mal so:


Modal öffnen:
Code:
Dialogklasse *pDialogklasse = new Dialogklasse;
pDialogklasse->DoModal();
oder, falls du Rückgabewerte auffangen willstm den DoModal() in einer If-Anweisung


Nichtmodal öffnen:
Code:
Dialogklasse *pDialogklasse = new Dialogklasse;
pDialogklasse->Create(...Jede Menge Parameter...);
pDialogklasse->Show(SW_RESTORE);

So ungefähr sollte es aussehen
Gruß Squeegee
 
Ganz ehrlich ich probier herum....aber ich hab jetzt nicht wirklich ne Ahnung wo ich den Code hinpacken soll, da er mir jedes mal 4 Fehler mit nichtdeklarierten Bezeichner usw. bringt.

Also in welche Klasse müsste ich den Code geben und zwar für ein NichtModulares Dialogfenster

die soll fix angezeigt werden, wenn das Programm gestartet wird...

mfg Harry
 
Also das wär mal mein Code, der zwar keinen Fehler jedoch das Fenster ständig neu "zeichnet" da es sich in der OnDraw Funktion befindet (also in der Hauptklasse(CVIew)

Wo müsste ich das hingeben das ich das nur einmal erzeugt bekomme? (Bei CDoc kommt ne Fehlermeldung das was mit der Zeile (BOOL ret = pDialog->Create(IDD_DIALOG1,this);) nicht stimmt )

Code:
	CMyDialog1* pDialog;
	//pDialog initialized to NULL in the constructor of CMyWnd class
   pDialog = new CMyDialog1();
   //Check if new succeeded and we got a valid pointer to a dialog object
   if(pDialog != NULL)
   {
      BOOL ret = pDialog->Create(IDD_DIALOG1,this);
      if(!ret)   //Create failed.
         AfxMessageBox("Dialogfenster konnte nicht erstellt werden");
      pDialog->ShowWindow(SW_SHOW);
   }
   else
      AfxMessageBox("Dialogfenster konnte nicht erstellt werden");


mfg Harry
 
Zuletzt bearbeitet:
Hi,
pack den gesamten Code, den du gepostet hast, in die Methode OnCreate() deiner View, dann gehts.
Beachte: OnCreate() bekommst über Eigenschaften der Klasse -> Überschreibungen.

In dieser Methode werden alle Initialisierungen, also auch eventuelle Kindfenster oder so gemacht.
Ähnlich der OnInitDialog() eines Dialogs.

OnDraw() ist rein fürs Zeichnen da, und von daher eine ganz schlechte Idee für Initialisierungen...
Ok, ist mir aber anfangs auch mal passiert *seufz*



Grüße Squeegee
 
In die View Klasse geben klappt icht, jedoch hast du wahrscheinlich die MainFrm gemeint weil da FUnktionierts...brauch ich das OnCreate() nicht mal überschreiben...

danke für die Hilfe

mfg Harry
 
achja nochwas, weißt du zufällig, wie ich bestimmen kann, wo der Dialog erscheint? (Koordianten oder Ausrichtung (zb Rechtsbündig))
 
Hi,
also, es geht definitiv auch in der OnCreate() der View, weil ich das grade probiert habe... aber wenns so wie dus gemacht hast auch geht - Passt :)
Die Position dachte ich eigentlich bis grade, würde über die Createstruct in der PreCreateWindow() gemacht die du dir ebenfalls als Überschreibung holen kannst. Hmm, habs grade getestet und ging irgendwie doch net... Bin ich also keine Hilfe.

Grüße Squeegee
 
Zurück