Anfängerproblem: Zeiger aufView



  • nagut, dann formulier ich das mal anders:
    ich muss von document aus abfragen, ob ein CRichEditCtrl in der View modifiziert wurde oder nicht! Bekomme ich das hin?



  • Beantworte ich mal andersrum:
    Wenn Du das Feld modifizierst,
    warum sagst Du das nicht dem Document? 😃 😃 😃

    Wenn's denn sein muss, vielleicht ist das eine Lösung für Dein Problem:
    GetActiveView()?



  • Das Problem ist doch das das RichEditCtrl bei Eingabe eines einzigen Zeichens
    sein eigenes modified flag setzt. ich kann doch nicht jeden tastenschlag
    mit einem setmodified im document bestätigen.



  • ich kann doch nicht jeden tastenschlag mit einem setmodified im document bestätigen

    Wieso nicht?



  • 1. wüsste ich nicht wie das geht
    2. ist das nicht performance lastig?

    würde mich freuen über eine Antwort zu 1.



  • Also die Ursprüngliche Frage war ja hier, wie man aus dem Doc an einen View-Zeiger kommt, und das ist recht einfach:

    POSITION pos = GetFirstViewPos();
    CView* pView = GetNextView(pos);
    

    So haste die erste View z.B. schon mal. Und übrigens gibt es durchaus Situationen, wo das nötig ist, obwohl das hier abgestritten wurde. Siehe z.B. "VC++ in 21 Tagen", Kap 12.



  • @DerGhost

    Und übrigens gibt es durchaus Situationen, wo das nötig ist, obwohl das hier abgestritten wurde

    Für kleine Projekte, in denen es programmtechnisch einfacher ist, einfach einen View-Zeiger im Dokument anzusprechen, kann man es durchaus stehenlassen.

    Aber:
    Document/View heisst nicht umsonst Document->View-Architektur. D.h. Daten werden aus dem Doc geholt und im View dargestellt. Ja jedes View, welches zu einem Dokument gehört, verschiedene Funktionen/Members (ausser den virtuellen) haben kann, ist das ja auch verständlich!

    @spock

    ist das nicht performance lastig?

    Ein Funktionsaufruf, der einfach nur eine Variable auf TRUE setzt, ist alles andere als performancelastig.



  • int* memory = new int[1000000];
    // Beispiel einer performancelastigen Schleife
    for( int i=0; i<100; i++)
      for( int j=i; j<1000000; j+=100)
        memory[j] = f( i, j);
    // Beispiel für eine bessere Schleife
    for( int i=0; i<1000000; i+=100)
      for( int j=i; j<i+100; j++)
        memory[j] = f( i, j);
    

    Editiert nach Einwand ... hab ich in der Eile übersehen 😉

    [ Dieser Beitrag wurde am 18.12.2002 um 13:26 Uhr von RenéG editiert. ]



  • 😕
    @RenéG

    Was soll dieses Beispiel den Beweisen????
    Es kommt doch in beiden Fällen ein anderes Ergebis raus.



  • Es ging doch gar nicht ums Ergebnis, hab ich da was davon geschrieben?
    Es geht nur darum, dass die ausgeführte Funktion f( i, j) immer die gleiche Ausführungsgeschwindigkeit besitzt, egal, welche Werte in i oder j stehen!

    Teste doch einfach die Geschwindigkeit, du wirst den Unterschied schon feststellen!

    Eigentlich ging es nur darum, zu zeigen, dass sich heutzutage kaum noch jemand für die Optimierung von Schleifen (Code) interessiert, da ich selbst die performance-lastige Schleife schon sehr häufig gesehen habe.

    [ Dieser Beitrag wurde am 18.12.2002 um 09:50 Uhr von RenéG editiert. ]



  • Ich glaube dir das f() immer die Gleiche zeit braucht aber in deinen beispiel wird f() im 1. Beisiel ca. 1.000.000 mal aufgerufen wir und beim 2. mal nur ca. 100 mal.
    Das meine ich mit:
    Es kommt doch in beiden Fällen ein anderes Ergebis raus.

    Allerdings gebe ich dir recht:

    Ein Funktionsaufruf, der einfach nur eine Variable auf TRUE setzt, ist alles andere als performancelastig

    🙂



  • Obiger Beitrage editier 😉


Anmelden zum Antworten