mfc string character cedit

mfc - CEdit control de longitud máxima?(en caracteres que puede mostrar)



string character (3)

¿Cuál es la longitud máxima para la cadena de texto contenida en un control CEdit en MFC? Recibo un pitido cuando trato de agregar un personaje después de que el personaje 30001 está documentado en alguna parte? ¿Puedo mostrar textos más largos en un CEdit? ¿Debería usar otro control?

Como dice "programador de Windows" a continuación, el límite de longitud de texto no es el mismo cuando el usuario escribe como cuando programáticamente establecemos el texto usando SetWindowText. El límite para establecer un texto programáticamente no se menciona en ninguna parte. El límite predeterminado de lentitud de texto para el usuario es incorrecto. (mira mi propia publicación a continuación).

Supongo que después de llamar a pEdit-> SetLimitText (0), el límite para la longitud del texto de entrada tanto programática como del usuario es de 7FFFFFFE bytes. ¿Estoy en lo cierto?

En vista, al pegar texto de más de 40000 caracteres en un CEdit, deja de responder. No importa si llamé a SetLimitText (100000) anteriormente.


"(en los caracteres que puede mostrar)"! = "al intentar agregar un personaje".

"cuando intentas agregar un personaje" == "La cantidad máxima de TCHARs que el usuario puede ingresar", a menos que te refieras a intentar agregar un personaje programáticamente.

"0x7FFFFFFE characters"! = "0x7FFFFFFE bytes", excepto algunas veces, un hecho que el texto citado de MSDN entiende a veces.

Apuesto a que nadie sabe la respuesta a la pregunta original. Pero "0x7FFFFFFE bytes" es probablemente uno de muchos límites.


Encontré que la documentación es incorrecta al mencionar el tamaño predeterminado para una línea de control CEdit en vista.

Ejecuté este código:

CWnd* pWnd = dlg.GetDlgItem(nItemId); CEdit *edit = static_cast<CEdit*>(pWnd); //dynamic_cast does not work if(edit != 0) { UINT limit = edit->GetLimitText(); //The current text limit, in bytes, for this CEdit object. //value returned: 30000 (0x7530) edit->SetLimitText(0); limit = edit->GetLimitText(); //value returned: 2147483646 (0x7FFFFFFE) }

la documentación dice:

Antes de llamar a EM_SETLIMITTEXT, el límite predeterminado para la cantidad de texto que un usuario puede ingresar en un control de edición es 32.767 caracteres.

que aparentemente es incorrecto


Puede averiguar cuál es el máximo para su control al llamar a CEdit :: GetLimitText () en su control. Esto devuelve el tamaño máximo para los datos de caracteres en bytes. Puede cambiar el tamaño máximo utilizando la función CEdit :: SetLimitText () .

La función SetLimitText () es equivalente a enviar un mensaje EM_SETLIMITTEXT . La documentación de ese mensaje proporciona los tamaños máximos que se pueden usar, pero dado que estos son enlaces de MSDN que probablemente se romperán para mañana, copiaré la información relevante :)

El parámetro UINT se interpreta como:

La cantidad máxima de TCHARs que el usuario puede ingresar. Para texto ANSI, este es el número de bytes; para texto Unicode, este es el número de caracteres. Este número no incluye el carácter nulo de terminación. Controles de edición enriquecidos: si este parámetro es cero, la longitud del texto se establece en 64,000 caracteres.

Editar controles en Windows NT / 2000 / XP: si este parámetro es cero, la longitud del texto se establece en caracteres 0x7FFFFFFE para controles de edición de línea única o -1 para controles de edición de línea múltiple.

Editar controles en Windows 95/98 / Me: si este parámetro es cero, la longitud del texto se establece en caracteres 0x7FFE para controles de edición de línea única o 0xFFFF para controles de edición de líneas múltiples.

Además, desde la sección de Comentarios:

Antes de llamar a EM_SETLIMITTEXT, el límite predeterminado para la cantidad de texto que un usuario puede ingresar en un control de edición es 32.767 caracteres.

Editar controles en Windows NT / 2000 / XP: para controles de edición de línea única, el límite de texto es 0x7FFFFFFE bytes o el valor del parámetro wParam, el que sea más pequeño. Para los controles de edición multilínea, este valor es -1 bytes o el valor del parámetro wParam, el que sea más pequeño.

Editar controles en Windows 95/98 / Me: para controles de edición de una línea, el límite de texto es 0x7FFE bytes o el valor del parámetro wParam, el que sea más pequeño. Para los controles de edición multilínea, este valor es 0xFFFF bytes o el valor del parámetro wParam, el que sea más pequeño.

Supongo que querían decir 0xFFFFFFFF en lugar de -1 en el segundo párrafo ...