Texteditor - Aenderung des Inhalts bemerken



  • Hi,
    habe mich mal an einem texteditor versucht, hier ist ein ausschnitt:

    case WM_CREATE:
    // ...
                                   FILE *fz;
                                   char *buffer = NULL;
                                   int iFileSize;
    
                                   fz = fopen("text.txt", "rb");
                                   if(fz != NULL)
                                   {
                                   fseek(fz, 0, SEEK_END);
                                   iFileSize = ftell(fz);
                                   buffer = (char*)malloc(iFileSize);
    
                                   fseek(fz, 0, SEEK_SET);
                                   fread(buffer, 1, iFileSize, fz);
                                   fclose(fz);
                                   }
    
                                   hEdit
                                   = CreateWindowEx( WS_EX_CLIENTEDGE,
                                                     "edit",
                                                     buffer, // Inhalt des Editfelds
                                                     WS_CHILD | WS_VISIBLE | WS_VSCROLL 
                                                     | ES_MULTILINE | ES_AUTOVSCROLL,
                                                     0, 28, 450, 452,
                                                     hWnd,
                                                     NULL,
                                                     ((LPCREATESTRUCT) lParam) -> hInstance,
                                                     NULL);
    
                                   free(buffer);
    // ...
    

    dann hab ich in WM_CLOSE noch folgendes:

    if( bSaved == false )
                                  {
                                      iSave = MessageBox( NULL, "Save file?", "Save", 
                                                          MB_YESNO | MB_ICONQUESTION );
    
                                      if( iSave == IDYES )
                                      {
                                          save_file();
                                      }
                                  }
    

    mein problem ist:
    sagen wir mal ich oeffne eine datei, veraendere sie, klicke dann auf der toolbar auf "Speichern"; bool bSaved wird dann auf true geschaltet udn wenn ich den editor verlasse, fragt der mich nix mehr. wenn ich aber nach dem letzten speichern noch etwas veraendert habe und das programm verlasse, soll bSaved auf false gesetzt werden und das programm fragt den anwender, ob gespeichert werden soll.
    habt ihr einen vorschlag? sollte ich die datei beim beenden mit der beim letzten speichern vergleichen?
    danke
    gruiesse



  • Nein, Du solltest bSaved immer dann auf false setzen, wenn eine Eingabe in Deinem Textfeld vollzogen wurde. Egal, was getan wurde. Sobald etwas in das Textfeld geschrieben wird, setze die Variable auf false. (Ich weiß jetzt nicht, wo man das in der WinAPI macht, aber es gibt doch sicher eine Funktion, die aufgerufen wird, sobald Du im Textfeld ein Zeichen eingibst. Und da kommt das rein.) Dann kannst Du sicher sein, daß nach einer Änderung immer gefragt wird, ob gespeichert werden soll. Die Dateien zu vergleichen ist zu aufwändig.





  • ja, danke, hat geklappt. und zwar...

    ich habe am ende des programms folgendes eingebaut:

    if( ( (SendMessage( hEdit, EM_GETMODIFY, wParam, lParam )) !=0 )
                                      && bSaved == false )
    

    bei der speichern-funktion setzte ich bSaved immer auf true; und wenn ich irgendwas ins editfeld eingebe, wird mir an WM_COMMAND ne nachricht gesendet;

    if( lParam == (LPARAM)hEdit )
                                    {
                                        bSaved = false;
    
                                        return 0;
                                    }
    

    danke nochmals
    gruesse



  • net schrieb:

    das könnt ihr euch alles sparen. ein edit-control kann man abfragen ob sich was geändert hat: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/editcontrols/editcontrolreference/editcontrolmessages/em_getmodify.asp


Anmelden zum Antworten