Feststellen, wenn der Bnutzer mein CDocument ändert



  • Hallo,
    ich habe eine Anwendung, die auf dem Doc/View Modell basiert. Sie ist fast fertig und funktioniert tadellos, nun wollte ich nur noch ein simples Feature einfügen:
    Sobald der Benutzer das CDocument geändert hat, soll in der Titelleiste des Dokuments am Ende des Dateinamens ein * angefügt werden.
    Das wäre ansich kein Problem, aber wie kann ich feststellen, dass der Benutzer das Dokument geändert hat? Gibts da irgendwo eine OnChange oder OnModify-Funktion, die aufgerufen wird? Ich habe nirgends was brauchbares gefunden.
    Wenn Mir da einer weiterhelfen könnte, würde mich das sehr freuen!
    Grüsse



  • OnFocus



  • Wie jetzt? CDocument::OnFocus?
    Das habe ich leider nirgends gefunden.


  • Mod

    Dein View ist selbst dafür verantwortlich GetDocument->SetModified() aufzurufen. OnFocus hat damit erst mal nichts zu tun.



  • ich denke du verwendet irgendwelche edit control etc. umd den inhalt zu ändern.. dvll. ein flag das du selber setzt wenn irgendwo was verändert wurde... oder definier ne neue Message welche du immer an das CDocument schickst wenn der user irgendwo was verändert.. über die message event weist du dann ob was geändert wurde



  • Danke für eure Hilfe.
    Ich habs jetzt geschafft, klappt soweit.
    Jetzt hab ich nur noch ein einzelnes Problem.
    Und zwar habe ich eine Variable, in der immer die aktuelle Breite einer Druckseite stehen soll. Wenn der Benutzer natürlich die Seitenränder ändert oder den Drucker sonst wie anders einrichtet, muss mein Programm davon benachrichtigt werden, um die Variable zu aktualisieren.
    Wie kann ich herausfinden, ob der Benutzer die Druck- oder Seiteneinstellungen geändert hat? Und wie finde ich dann die Breite einer Seite heraus? Ich habs so versucht:

    PRINTDLG dlg;
    theApp.GetPrinterDeviceDefaults(&d);
    CDC dc;
    dc.FromHandle(dlg.hDC);
    dc.GetDeviceCaps(HORZSIZE);
    

    Das hat aber leider nicht funktioniert (stürzt immer ab). Wie könnte man es lösen?

    Grüsse



  • mal kurz was bei www.Coding-Help.de nachgeschaut.

    probier dies mal aus.

    //Maße des druckbaren Bereiches des Papiers ermitteln (in 0,1mm)
          dcPrint.SetMapMode(MM_LOMETRIC);
          int nLaenge = dcPrint.GetDeviceCaps(VERTSIZE);
          int nBreite = dcPrint.GetDeviceCaps(HORZSIZE); 
          int nRechts = nBreite * 10 - 50;
          int nUnten = -nLaenge * 10 + 50;
    

    Turmfalke



  • Danke @Turmfalke,
    das funktioniert soweit bestens.
    Den dcPrint erstelle ich einfach mittels

    theApp.CreatePrinterDC.

    Das funktioniert! Aber eigentlich wollte ich, dass die Funktion auch noch die Ränder berücksichtigt, die der Benutzer im Dialog "Seite einrichten" eingestellt hat. So bekomme ich nämlich die Abmessungen eines A4-Blattes 😃 Ich möchte aber die Abmessungen des bedruckbaren Bereichs wissen. Geht das auch?
    Jedenfalls vielen Dank schon mal für deine Hilfe!

    Gruss



  • Die Abmessungen des druckbaren Bereiches hast Du, wenn der User nun die
    Ränder im Dokument ändert, so musst es aus Dokument heraus berücksichtigen.

    Turmfalke


Log in to reply