Allocare un Buffer di testo

Quando il sistema crea un controllo di modifica, automaticamente crea un buffer di testo, imposta le dimensioni iniziali e aumenta la dimensione come necessario. Le dimensioni possono essere fino a un limite predefinito di circa 32 kilobyte per i controlli di modifica a riga singola. Poiché può cambiare questo limite, esso viene chiamato un limite morbido. Un'applicazione può impostare un limite rigido per la dimensione del buffer inviando un messaggio EM_SETLIMITTEXT per il controllo di modifica. Se il buffer supera ogni limite, il sistema invia un messaggio a EN_ERRSPACE l'applicazione. Un'applicazione può recuperare l'attuale limite di testo mediante l'invio di un messaggio di EM_GETLIMITTEXT.

In genere, il sistema crea un buffer del controllo di modifica in una finestra di dialogo, utilizzo di memoria di fuori di segmento di dati dell'applicazione. Un'applicazione può sopprimere questo comportamento di allocazione predefinito e creare il buffer da suoi heap locale utilizzando lo stile DS_LOCALEDIT, quando si crea il controllo di modifica. Un'applicazione che utilizza lo stile DS_LOCALEDIT è responsabile di tutte le allocazioni di buffer. Per rendere l'allocazione iniziale, un'applicazione può chiamare il funzione LocalAlloc e passare il buffer restituito handle per il controllo di modifica inviando un messaggio a EM_SETHANDLE . Per rendere le allocazioni successive (in risposta a un messaggio di EN_ERRSPACE, per esempio), un'applicazione dovrebbe salvare il contenuto corrente del buffer (se necessario) e ottenere un nuovo buffer come segue

  1. Recuperare l'handle della memoria attualmente assegnata per il testo in un controllo di modifica su più righe con l'invio di un messaggio di EM_GETHANDLE il controllo.
  2. Liberare il buffer chiamando il funzione LocalFree.
  3. Ottenere un nuovo buffer (e maniglia tampone) chiamando LocalAlloc.
  4. Dare la maniglia tampone al sistema mediante l'invio di un messaggio di EM_SETHANDLE il controllo.

I messaggi di EM_SETHANDLE ed EM_GETHANDLE si applicano solo ai controlli di modifica su più righe.

Un'applicazione che utilizza il comportamento di allocazione predefinito (cioè, non utilizzare lo stile DS_LOCALEDIT) non deve inviare messaggi EM_SETHANDLE ed EM_GETHANDLE per il controllo di modifica.

L'invio di un messaggio di EM_SETHANDLE ha diversi effetti collaterali: cancella il flag di annullamento (facendo il messaggio EM_CANUNDO restituire zero), cancella il flag di modifica (facendo il messaggio EM_GETMODIFY restituire zero) e ridisegna la finestra di modifica del controllo.

Rimedio: Inserire il CD-ROM CD di MSDN Library.

Index