Technician Geschrieben 13. Juni 2003 Geschrieben 13. Juni 2003 Hallo, ich hab mir ein kleines Mathe-Programm geschrieben, und möchte nun einen Funktionsplot realisieren. Wie ich auf ein CView zeichnen kann, weiß ich. Aber wie kann ich auf ein CFormView zeichnen? Kann man eine CView in eine CFormView als eine Art Steuerelement "einbauen" :confused: Bitte helft mir weiter! Grüße, Technician Zitieren
Guybrush Threepwood Geschrieben 13. Juni 2003 Geschrieben 13. Juni 2003 Hi, Da CFormView von CView abgeleitet ist, müßtest du doch auch bei CFormView in der OnDraw() Methode zeichnen können. Oder nicht? Gruß Guybrush Zitieren
Technician Geschrieben 13. Juni 2003 Autor Geschrieben 13. Juni 2003 Hi! Original geschrieben von Guybrush Threepwood Da CFormView von CView abgeleitet ist, müßtest du doch auch bei CFormView in der OnDraw() Methode zeichnen können. Oder nicht? ja, natürlich ginge das. Aaaaber: müsste ich mich dann nicht um das Zeichnen der ganzen Steuerelemente auch selbst kümmern, wenn ich OnPaint() überschreibe?! :confused: Gruß, Technician Zitieren
Guybrush Threepwood Geschrieben 13. Juni 2003 Geschrieben 13. Juni 2003 Also, ich weiß jetzt nicht so genau wie die MFC das handhabt, aber normalerweise nicht. Du kannst das ja einfach mal ausprobieren und nen Strich oder so malen und schauen was passiert. Zitieren
Technician Geschrieben 13. Juni 2003 Autor Geschrieben 13. Juni 2003 ich hab das jetzt mal ausprobiert, und es ist folgendes passiert: nachdem ich OnDraw überschrieben habe, werden zwar die Steuerelemente automatisch wie zuvor gezeichnet - aber das, was ich selber zeichnen will, erscheint nicht auf der Form OnDraw wird allerdings aufgerufen (ich hab das mit der MessageBox getestet). hier der code: void COnpaintView::OnDraw(CDC *pDC) { //AfxMessageBox("painting!"); //Device Context zum Zeichnen CPaintDC dc(this); //Ausgabe Zähler und Bezeichnung dc.TextOut(270, 20, "ROT"); //Pinsel zum Zeichnen erzeugen CBrush meinPinsel(RGB(20, 255, 30)); //Pinsel in Gerätekontext laden dc.SelectObject(meinPinsel); //kreis zeichnen dc.Ellipse(100, 50, 50, 100); //standardpinsel in gerätekontext laden dc.SelectStockObject(WHITE_BRUSH); } Zitieren
Technician Geschrieben 13. Juni 2003 Autor Geschrieben 13. Juni 2003 habe gerade meinen fehler selber bemerkt *grummel* ich sollte vielleicht doch besser den gerätekontext verwenden, der als parameter übergeben wird void COnpaintView::OnDraw(CDC *pDC) { //Ausgabe Zähler und Bezeichnung pDC->TextOut(270, 20, "ROT"); } statt void COnpaintView::OnDraw(CDC *pDC) { //Device Context zum Zeichnen CPaintDC dc(this); //Ausgabe Zähler und Bezeichnung dc.TextOut(270, 20, "ROT"); } und jetzt funktioniert's auch Zitieren
Technician Geschrieben 18. Juni 2003 Autor Geschrieben 18. Juni 2003 Hallo, ich hab mir einen kleinen Funktionsplotter geschrieben, und möchte den Funktionsgraph nun als Bitmap abspeichern können. Hier seht ihr, wie ich das Zeichnen des Graphen (bisher) gelöst habe. Der Graph wird einfach auf die CFormView (auf der auch Steuerelemente drauf sind) gezeichnet. Wie mache ich das nun mit dem Speichern? Ich glaub, das kann ich dann nicht so einfach machen, oder?! :confused: Muss ich mich dafür mit GDI (kenn ich nur vom hören-sagen) beschäftigen :confused: Bitte helft mir weiter, Technician Zitieren
Guybrush Threepwood Geschrieben 18. Juni 2003 Geschrieben 18. Juni 2003 Hi, du hast dich glaube ich verklickt:D Zu deinem Problem hab ich mal was bei Codeguru gesehen, vielleicht hilfts dir ja. Gruß Guybrush Zitieren
Technician Geschrieben 18. Juni 2003 Autor Geschrieben 18. Juni 2003 Original geschrieben von Guybrush Threepwood Hi, du hast dich glaube ich verklickt:D ja, das hab ich *ans-hirn-fass* Original geschrieben von Guybrush Threepwood Zu deinem Problem hab ich mal was bei Codeguru gesehen, vielleicht hilfts dir ja. thank you - werd ich mir gleich mal reinziehen Zitieren
Technician Geschrieben 18. Juni 2003 Autor Geschrieben 18. Juni 2003 das ist nicht so ganz das wahre... erstens: "You should note that if the window is partially or completely covered by other windows then the saved bitmap will show parts of these other windows too. " zweitens: wenn ich das ganze compilieren will, dann erhalte ich bei DDBToDIB() und WriteDIB() "nichtdeklarierter Bezeichner" außerdem möchte ich ja gar nicht einen Screenshot machen (das macht dieser Code wohl), sondern nur diesen bestimmten Bereich wegspeichern. Zitieren
Guybrush Threepwood Geschrieben 18. Juni 2003 Geschrieben 18. Juni 2003 Die beiden Funktionen gibt`s auch bei Codeguru, die sind vom selbem Autor: WriteDIB DDBToDIB Ich hab mal kurz durch den Artikel gelesen, aber ich kann mir das irgendwie nicht vorstellen warum die Teile von Fenstern die das Bild überdecken in der Datei mitgespeichert werden. Weil man übergibt der Funktion ja nur das was auch in dem Fenster dargestellt wird:confused: Aber wenns da steht wird`s wohl stimmen. Zitieren
Technician Geschrieben 20. Juni 2003 Autor Geschrieben 20. Juni 2003 Hallo, ich hab jetzt selber noch was sehr nützliches gefunden: http://people.freenet.de/cpp-programming.de.vu/code/code17.html gruß & danke, technician Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.