C/Visual C - Insertar texto en un CEDIT multilinea

 
Vista:

Insertar texto en un CEDIT multilinea

Publicado por Jose (1 intervención) el 17/10/2002 16:32:32
Hola, tengo un fichero de texto, que quiero ir leyendo linea a linea e
insertando cada linea en un CEDIT multilineas para poder ver su contenido.
Como puedo manejar el CEDIT multilineas?, o sea que instruccion debo utilizar para la insercion consecutiva de una variable CString en un CEDIT.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Manejo de CEdit multilínea para insertar texto línea por línea

Publicado por Alejandro (913 intervenciones) el 27/03/2025 17:12:57
Para insertar texto en un control `CEdit` de múltiples líneas en MFC (Microsoft Foundation Classes), puedes utilizar la función `SetWindowText` para establecer el texto completo o `ReplaceSel` para insertar texto en la posición actual del cursor. Aquí te muestro cómo hacerlo paso a paso.

1. Configuración del control CEdit


Asegúrate de que tu control `CEdit` esté configurado como multilínea. Esto se puede hacer en el recurso del diálogo, estableciendo la propiedad "Multiline" a `True`.

2. Código para leer el archivo e insertar en CEdit


Aquí tienes un ejemplo de cómo leer un archivo de texto línea por línea y agregar cada línea a un control `CEdit`:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include<afxwin.h>
#include <afxext.h>
#include <fstream>
#include <string>
 
class CMyDialog : public CDialogEx {
public:
    CEdit m_editControl; // Control CEdit
 
    CMyDialog() : CDialogEx(IDD_MY_DIALOG) {}
 
    virtual BOOL OnInitDialog() {
        CDialogEx::OnInitDialog();
 
        // Inicializar el control CEdit
        m_editControl.SubclassDlgItem(IDC_EDIT1, this); // Suponiendo que IDC_EDIT1 es el ID del CEdit
 
        // Leer el archivo y agregar líneas al CEdit
        ReadFileAndInsertText("mi_archivo.txt");
 
        return TRUE; // Devuelve TRUE a menos que se establezca el foco en un control
    }
 
    void ReadFileAndInsertText(const CString& filePath) {
        std::ifstream file(filePath);
        if (!file.is_open()) {
            AfxMessageBox(_T("No se pudo abrir el archivo."));
            return;
        }
 
        CString line;
        while (std::getline(file, line.GetBufferSetLength(256), '\n')) {
            line.ReleaseBuffer(); // Liberar el buffer
 
            // Insertar la línea en el CEdit
            m_editControl.ReplaceSel(line + _T("\r\n"), TRUE); // Agregar un salto de línea
        }
 
        file.close();
    }
};
 
// Implementación de la aplicación
class CMyApp : public CWinApp {
public:
    virtual BOOL InitInstance() {
        CMyDialog dlg;
        m_pMainWnd = &dlg;
        dlg.DoModal();
        return FALSE;
    }
};
 
CMyApp theApp;

Explicación del código:


1. CEdit Control: Se declara un control `CEdit` llamado `m_editControl`.
2. OnInitDialog: En el método `OnInitDialog`, se inicializa el control `CEdit` y se llama a la función `ReadFileAndInsertText` para leer el archivo.
3. ReadFileAndInsertText: Esta función abre el archivo, lee cada línea y la inserta en el control `CEdit` usando `ReplaceSel`. Se agrega un salto de línea después de cada línea para mantener el formato.
4. Buffer Management: Se utiliza `GetBufferSetLength` para obtener un buffer de longitud fija y `ReleaseBuffer` para liberar el buffer después de leer la línea.

Consideraciones:


- Asegúrate de que el ID del control `CEdit` en el recurso coincida con el que estás utilizando en el código.
- Maneja adecuadamente los errores, como la imposibilidad de abrir el archivo.
- Puedes ajustar el tamaño del buffer según sea necesario.

Con este enfoque, podrás leer un archivo de texto línea por línea e insertarlo en un control `CEdit` multilínea en tu aplicación MFC. ¡Buena suerte, José!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar