OnDraw
-
Hallo,
ich habe ein Problem mit der View-Klasse.
Wie kann es sein, das der gesamte Abschnitt OnDraw vom Compiler übersprungen wird?
Egal welche zusätzlichen Befehle ich dort einbinde, OnDraw wird übergangen. Vielen Dank schonmal!
-
Mach mal "Alles neu erstellen" im Menü Erstellen.
-
Vielen Dank für den Tip, das habe ich schon probiert. Leider ohne Erfolg.
Beim setzen eines Haltepunktes in OnDraw, wird dieser vom Debugger nicht berücksichtigt.
-
Hast du die OnDraw per hand überladen oder mit dem Klassenassistenten? Sprich ist der Auruf in deiner Messagemap deklariert?
-
OnDraw ist virtuell - das taucht in der MessageMap nicht auf.
Ich habe es extra mal ausprobiert.Hast du dich vielleicht irgendwo verschrieben, so dass sich die Funktion minimal unterscheidet?
So muss es aussehen:virtual void OnDraw(CDC* pDC);
Bei mir komme ich in die Funktion rein.
-
estartu_de schrieb:
OnDraw ist virtuell - das taucht in der MessageMap nicht auf.
Ich habe es extra mal ausprobiert.Hast du dich vielleicht irgendwo verschrieben, so dass sich die Funktion minimal unterscheidet?
So muss es aussehen:virtual void OnDraw(CDC* pDC);
Bei mir komme ich in die Funktion rein.
ah stimmt das war die OnPaint
-
Vielen Dank für Eure Hilfe!
Es ist tatsächlich so, die Funktion wurde in der View.h als pberladen markiert.
Es habdelt sich um ein fertiges Programm, das ich um einige Funktionen erweitern möchte.
Wie kann ich diese Überladung rückgängig machen, ohne das Programm zu beeinträchtigen?
Vielen Dank für die Hilfe!!!!!
-
Hans00 schrieb:
Wie kann ich diese Überladung rückgängig machen, ohne das Programm zu beeinträchtigen?
Meinst du jetzt überschreiben oder wirklich überladen?
Ich nehme an du meinst ersteres. Die OnDraw ist in CView eine abstrakte Methode, die musst du überschreiben, wenn deine abgeleitete Klasse nicht ebenfalls abstrakt sein soll.Ansonsten weis ich jetzt nicht so recht was du meinst.
-
Ist die nun Überladen oder Überschrieben?
Zeig sie doch mal, also den Teil aus dem Header, der verrät ja nix.
-
anders gefragt:
was muß ich tun, damit ich mit der Funktion OnDraw wieder ganz normal arbeiten kann? Ich möchte mit Hilfe dieser Funktion die Textfarbe anders gestalten.
-
nu zeig doch mal deinen Code!!! Ich werd ihn schon nicht patentieren und dir dann ne Rechnung dafür schicken
Was du generell tun musst, ist einfach die OnDraw-Methode zu überschreiben.^^
-
darüber mache ich mir keine Gedanken...
hier ist der Codeausschnitt aus der View.h:// Operationen public: // Überladungen // Vom Klassenassistenten generierte Überladungen virtueller Funktionen //{{AFX_VIRTUAL(CW32dView) public: virtual void OnDraw(CDC* pDC); // überladen zum Zeichnen dieser Ansicht virtual BOOL PreCreateWindow(CREATESTRUCT& cs); protected: virtual BOOL OnPreparePrinting(CPrintInfo* pInfo); virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo); virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo); //}}AFX_VIRTUAL
-
also du überschreibst hier eine Methode und tust sie nicht überladen. Überladen ist, wenn zwei Methoden denselben Namen, aber eine unterschiedliche Parameterliste haben.
Hans00 schrieb:
Vielen Dank für Eure Hilfe!
Wie kann ich diese Überladung rückgängig machen, ohne das Programm zu beeinträchtigen?Was willst du genau? Wenn du nicht willst, dass die Methode etwas macht, dann mach einfach ne leere Methode. Aber das hattest du sicher nicht im Sinn oder?
-
Da mein Programm mit der View Klasse eine Textdatei in einem RichEditFenster ausgibt, möchte ich in der Funktion OnDraw über SetTextColor die Textfarbe der ausgegebenen Textdatei ändern. Ist das machbar oder bin ich auf dem Holzweg?
Dankeschön
-
Das RichEdit-Feld hat seine eigene Zeichenmethode und hat nichts direkt mit der OnDraw der View-Klasse zu tun.
Was du brauchst ist die OnCtlColor-Nachricht für Steuerelement. Such mal hier im MFC-Abteil das wurde vor nicht allzu langer Zeit in mehrerer Threads behandelt.
-
Ja danke, ich werde mal weitersuchen.
Das Problem ist nur, in meinem Programm gibt es keine Dialog-Klasse, so wie es ein Thread beschreibt.