zeichnen im Dialogfenster
-
Den Code baue ich dann in die .cpp der Childdatei ein, nehme statt CParentDLG* meine Parent.cpp, z.B. Bild -> CBildDLG und als member?
-
Den Code baue ich dann in die .cpp der Childdatei ein
Ja wie auch immer dein MaleDialog heisst...
nehme statt CParentDLG* meine Parent.cpp
Ich habe keine Ahung wie deine Klasse von der du das "Hauptfenster" erstellst heisst.... du must danach casten... Wenn deine Klasse also MEINFENSTERINDICHDIEWERTEFÜRDIEFRAKTALBERECHNUNGEINTRAGE heisst dann halt nach
(MEINFENSTERINDICHDIEWERTEFÜRDIEFRAKTALBERECHNUNGEINTRAGE*) casten...z.B. Bild -> CBildDLG und als member?
äh nein
((MEINFENSTERINDICHDIEWERTEFÜRDIEFRAKTALBERECHNUNGEINTRAGE*)AfxGetMainWnd())->member_des_Datendialoges_auf_das_ich_vom_dem_Dialog_auf_dem_ich_zeichne_zugreifen_will
-
Nun noch eine winzige Frage, was könnte folgenden Fehler verursachen?
error C2059: Syntaxfehler : 'constant'
Danke für deine Geduld
-
kann ich dir so aus dem Hut nicht sagen... dazu müsste ich Quellcode sehen...
-
Also der Fehler kommt von diesen Codestück:
((CBildDlg*)AfxGetMainWnd())->IDD_GRAFIK_DIALOG;
Hauptfenster ist Grafik und Subfenster ist Bild
EDIT: Habe das in
CBildDlg::CBildDlg(CWnd* pParent /*=NULL*/) : CDialog(CBildDlg::IDD, pParent)
geschrieben
-
((CBildDlg*)AfxGetMainWnd())->IDD_GRAFIK_DIALOG;
IDD_GRAFIK_DIALOG ist falsch...
du musst doch irgendwelche Paramter und Punkte oder was auch immer angeben die du zeichenen willst... Diese solltest du als ein member deiner Klasse repräsentieren... auf das greifst du dann beim malen zu...
-
Ahh,
jetzt klappt es ja fast.
Wie sieht denn dann der Syntax für mehrere Werte aus?
Wenn ich das Programm ausführe wird ja das 2. Fenster nicht angezeigt, habe nun beiBOOL CGrafikDlg::OnInitDialog() //folgendes eingebaut ShowWindow(IDD_BILD_DLG);
Blos genügt dies anscheinend noch nicht um das Fenster anzeigen zu lassen.
-
Den Dialog Modal starten...
MaleMaleDialog dlg; dlg.DoModal();
-
Hab jetzt die Fenster stehen:)
Hapert blos noch bei der Übergabe der Werte für die Position eines Punktes. Kann man da die Variablen irgend wie Global setzen, sodass man in jeden Fenster darauf zugreifen kann?
-
Hapert blos noch bei der Übergabe der Werte für die Position eines Punktes. Kann man da die Variablen irgend wie Global setzen, sodass man in jeden Fenster darauf zugreifen kann?
Prinzipiell ja aber globals sind immer schlecht...
mach doch wie ich gesagt habe members des Parentdialoges draus und greif dann mit AfxGetMainWnd drauf zu...
-
Ok, das mit den Werte übergeben klappt jetzt, blos setzt das Programm den Punkt mit den Koordinaten schon am Anfang und nicht erst wenn ich den Button drücke. Da dachte ich mir nun, dass ich das vom Anfang des Themas mal einbauen kann:
void CGrafikDlg::OnZeichnenButton() { // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen CWnd *wp; CDC *pDC; wp=GetDlgItem(IDD_BILD_DLG); pDC=wp->GetDC(); pDC->SetPixel(m_xwert,m_ywert,RGB(250,0,0)); wp->ReleaseDC(pDC); }
Er kompiliert dies zwar, aber beim ausführen fängt er dann an zu meckern. Sicher weil ich mal wieder irgend ein ... geschrieben habe, es aber nicht weis:(
Was könnte ich da jetzt machen?
EDIT:
Hab es jetzt geschfafft, dass er ein Punkt zeichnet wenn ich den Button drücke, habe einfach malm_dlgBild.Invalidate();
hinzugefügt und es klappt.
Nun aber die letzte Frage, versprochen:) Wie kann ich im zweiten Fenster die Ausrichtung des Koordinantensystems beeinflussen, mittels SetMapMode und SetViewportOrgEx. Für SetViewportOrgEx brauch ich ja die Breite und Höhe des Fensters wegen den Mittelpunkt, wie kann ich das dann angeben lassen? So wie am Anfang des Themas?
-
mach doch einfach ne Variable die du auf true setzt wenn
der Button gedrückt wird, diese kannst du dann in der OnPaint-Methode
abfragen und entweder zeichnen lassen oder nicht.NUR im OnButton zu zeichnen ist keine so gute idee, da die Zeichnung
dann verschwindet sobald ein anderes Fenster überlappt oder dein Fenster
minimiert wird.
Wenn du den Dialog selbst anweisen willst die OnPaint auszuführen gibt es
dafür die Funktion Invalidate();//edit: zu langsam gewesen *g*
-
Es läuft! Vielen Dank Windalf, für deine Geduld!! Weis selbst als Moderator von einen kleinen Mathe Forum, dass manche(ich sicherlich auch) ziemlich "schwierig" sein können. Aber am Ende kriegen wir´s doch hin:)Hier noch ein kleines Bild. Werd es aber noch ausbauen, denn da fehlt ein wenig Farbe.
http://img146.echo.cx/img146/2108/bild12oy.pngMfG
Stefan
-
Das Bild entschädigt mich natürlich voll und ganz
Weis selbst als Moderator von einen kleinen Mathe Forum, dass manche(ich sicherlich auch) ziemlich "schwierig" sein können. Aber am Ende kriegen wir´s doch hin:)
Nö ging doch gut. Ich muste keine Romane schreiben und du hast trotzdem verstanden was ich gepostet habe...
Da treiben sich hier noch ganz andere Leute rum die erwarten würden das man Ihnen das ganze Programm schreibt. Würde mir dein Proggie aber auch mal ganz gerne Life angucken. Also wenn du Lust hast kannst du mir es gerne mailen...
-
Hi,
ich denk mal das man mit dem Email Programm der Seite keine Anhänge mit versenden kann, oder? Wenn es nicht geht und du deine Adresse hier nicht veröffentlichen willst, dann schick deine Adresse an meine ??????
Aber das mit dem alles haben gibt es auch in Mathe, "wer schön wenn mir einer die komplette Lösung per mail schicken könnte"
MfG
Stefan
-
Ich hätte dann eine email von dir bekommen und zurückgeschickt. Editier deine mail lieber wieder raus sonst hast du 10 Spammails pro Tag mehr...
-
Danke für den Antispamhinweis:)
-
Wie könnte dann ein derartiger Thread aussehen? Gibt es da gleich sowas wie ein
AfxMessageBox oder so ähnlich?Nebenbei gab es bei dir während des startens eine Fehlermeldung? Irgend was mit der Berechtigung? Bei einen Freund startete das Programm nicht? Wenn ja wie hast du es zum laufen gebracht?
-
eventuell musst du noch fehlende dll's mitliefern. Welche sagt er dir dann ja beim Programmstart...
Threadbeispiel hab ich mal eins erstellt weil die Frage hier so oft kam. Habs dir gemailt...
-
Hi,
hab da mal noch ne Frage zu
UINT CThreadexampleDlg::ThreadFunktion(LPVOID pParam)
hasst du dies überall manuell eingetragen oder hast du da ein "Erstellungsprogramm" genutzt, denke da an das Einfügen einer Memberfunktion? Hab nämlich bis jetzt keinen Weg gefunden dies so zu erstellen, sonst würde ich dies halt überall manuell übernehmen.
MfG
Stefan