CString
Formato CString y presentación de cuadros de mensaje
Se ofrecen distintas funciones para dar formato a objetos CString
y analizarlos. Se pueden usar estas funciones si es necesario manipular objetos CString
, pero son especialmente útiles para dar formato a cadenas que aparecerán en el texto del cuadro de mensaje.
En este grupo de funciones también se incluye una rutina global para mostrar un cuadro de mensaje.
CString
Funciones
Nombre | Descripción |
---|---|
AfxExtractSubString |
Extrae substrings separadas por un único carácter de una cadena de origen determinada. |
AfxFormatString1 |
Sustituye una cadena dada por los caracteres del formato "%1" en una cadena contenida en la tabla de cadenas. |
AfxFormatString2 |
Sustituye dos cadenas por los caracteres del formato "%1" y "%2" en una cadena contenida en la tabla de cadenas. |
AfxMessageBox |
Muestra un cuadro de mensaje. |
Requisitos
Encabezado afxwin.h
AfxExtractSubString
Esta función global se puede usar para extraer una substring de una cadena de origen determinada.
BOOL AFXAPI AfxExtractSubString (
CString& rString,
LPCTSTR lpszFullString,
int iSubString,
TCHAR chSep = '\n');
Parámetros
rString
Referencia a un objeto CString
que recibirá una substring individual.
lpszFullString
Cadena que contiene el texto completo de la cadena de la que se extrae.
iSubString
Índice de base cero de la substring que se va a extraer de lpszFullString
.
chSep
Carácter separador con el que se delimitan substrings.
Valor devuelto
TRUE
si la función extrajo correctamente la substring en el índice provisto; de lo contrario FALSE
.
Comentarios
Esta función sirve para extraer varias substrings de una cadena de origen cuando un carácter único conocido separa cada substring. Con esta función se busca desde el inicio del parámetro lpszFullString
cada vez que se llama.
Esta función devuelve FALSE
si lpszFullString
se establece en NULL
o la función alcanza el final de lpszFullString
sin encontrar iSubString
+1 repeticiones del carácter separador especificado. No se modifica el parámetro rString
si lpszFullString
se establece en NULL
; de lo contrario, el parámetro rString
se establece en la cadena vacía si no se extrajo la substring para el índice especificado.
Ejemplo
// The following example extracts a series of name, value pairs from a
// given source string:
// Input string consisting of a number of name, value pairs
LPCTSTR lpszSource = _T("\"Name\"=\"John Smith\"\n")
_T("\"Company\"=\"Contoso, Ltd\"\n\"Salary\"=\"25,000\"");
CString strNameValue; // an individual name, value pair
int i = 0; // substring index to extract
while (AfxExtractSubString(strNameValue, lpszSource, i))
{
// Prepare to move to the next substring
i++;
CString strName, strValue; // individual name and value elements
// Attempt to extract the name element from the pair
if (!AfxExtractSubString(strName, strNameValue, 0, _T('=')))
{
// Pass an error message to the debugger for display
OutputDebugString(_T("Error extracting name\r\n"));
continue;
}
// Attempt to extract the value element from the pair
if (!AfxExtractSubString(strValue, strNameValue, 1, _T('=')))
{
// Pass an error message to the debugger for display
OutputDebugString(_T("Error extracting value element\r\n"));
continue;
}
// Pass the name, value pair to the debugger for display
CString strOutput = strName + _T(" equals ") + strValue + _T("\r\n");
OutputDebugString(strOutput);
}
Requisitos
Encabezado afxwin.h
AfxFormatString1
Sustituye la cadena a la que apunta lpsz1
para cualquiera instancia que tenga caracteres "%1"
en el recurso de cadena de plantilla identificada por nIDS
.
void AfxFormatString1(
CString& rString,
UINT nIDS,
LPCTSTR lpsz1);
Parámetros
rString
Referencia a un objeto CString
que contendrá la cadena resultante después de que se haga la sustitución.
nIDS
Id. de recurso de la cadena de plantilla en la que se hará la sustitución.
lpsz1
Cadena que reemplazará los caracteres "%1"
del formato de la cadena de plantilla.
Comentarios
La cadena formada recientemente se almacena en rString
. Por ejemplo, si la cadena de la tabla de cadenas es "File %1 not found"
y lpsz1
es igual a "C:\MYFILE.TXT"
, rString
contendrá la cadena "File C:\MYFILE.TXT not found"
. Esta función sirve para dar formato a cadenas enviadas a cuadros de mensaje y otras ventanas.
Si los caracteres de formato "%1"
figuran en la cadena más de una vez, se harán varias sustituciones.
Ejemplo
void DisplayFileNotFoundMessage(LPCTSTR pszFileName)
{
CString strMessage;
// The IDS_FILENOTFOUND string resource contains "Error: File %1 not found"
AfxFormatString1(strMessage, IDS_FILENOTFOUND, pszFileName);
// In the previous call, substitute the actual file name for the
// %1 placeholder
AfxMessageBox(strMessage); // Display the error message
}
Requisitos
Encabezado afxwin.h
AfxFormatString2
Sustituye la cadena a la que apunta lpsz1
para cualquier instancia de los caracteres "%1"
y la cadena a la que apunta lpsz2
para cualquier instancia de los caracteres "%2"
, en el recurso de cadena de plantilla identificado por nIDS
.
void AfxFormatString2(
CString& rString,
UINT nIDS,
LPCTSTR lpsz1,
LPCTSTR lpsz2);
Parámetros
rString
Referencia a la CString
que contendrá la cadena resultante después de la sustitución.
nIDS
Id. de la tabla de cadena de la cadena de plantilla en la que se hará la sustitución.
lpsz1
Cadena que reemplazará los caracteres "%1"
del formato de la cadena de plantilla.
lpsz2
Cadena que reemplazará los caracteres "%2"
del formato de la cadena de plantilla.
Comentarios
La cadena formada recientemente se almacena en rString
. Por ejemplo, si la cadena de la tabla de cadenas es "File %1 not found in directory %2"
y lpsz1
apunta a "MYFILE.TXT"
y lpsz2
apunta a "C:\MYDIR"
, rString
contendrá la cadena "File MYFILE.TXT not found in directory C:\MYDIR"
.
Si los caracteres de formato "%1"
o "%2"
figuran en la cadena más de una vez, se harán varias sustituciones. No tienen que estar en orden numérico.
Ejemplo
void DisplayFileNotFoundMessage(LPCTSTR pszFileName, LPCTSTR pszDirectory)
{
CString strMessage;
// The IDS_FILENOTFOUND string resource contains "Error: File %1 not
// found in directory %2"
AfxFormatString2(strMessage, IDS_FILENOTFOUND2, pszFileName, pszDirectory);
// In the previous call, substitute the actual file and directory
// names into the message string
AfxMessageBox(strMessage); // Display the error message
}
Requisitos
Encabezado afxwin.h
AfxMessageBox
Muestra un cuadro de mensaje en la pantalla.
int AfxMessageBox(
LPCTSTR lpszText,
UINT nType = MB_OK,
UINT nIDHelp = 0);
int AFXAPI AfxMessageBox(
UINT nIDPrompt,
UINT nType = MB_OK,
UINT nIDHelp = (UINT) -1);
Parámetros
lpszText
Apunta a un objeto CString
o una cadena terminada en NULL que contiene el mensaje que se va a mostrar en el cuadro de mensaje.
nType
Estilo del cuadro de mensaje. Aplique cualquier estilo de cuadro de mensaje al cuadro.
nIDHelp
Id. de contexto de Ayuda del mensaje; 0 indica que se usará el contexto de ayuda predeterminado de la aplicación.
nIDPrompt
Id. único empleado para hacer referencia a una cadena en la tabla de cadenas.
Valor devuelto
Cero si no hay suficiente memoria para mostrar el cuadro de mensaje; de lo contrario, se devuelve uno de los valores que se enumeran a continuación:
IDABORT
Se ha seleccionado el botón Anular.IDCANCEL
Se ha seleccionado el botón Cancelar.IDIGNORE
Se ha seleccionado el botón Ignorar.IDNO
Se ha seleccionado el botón No.IDOK
Se ha seleccionado el botón Aceptar.IDRETRY
Se ha seleccionado el botón Reintentar.IDYES
Se ha seleccionado el botón Sí.
Sin hay un botón Cancelar en un cuadro de mensaje, se devolverá el valor IDCANCEL
si se presiona la tecla ESC o si se selecciona el botón Cancelar. Si en un cuadro de mensaje no está el botón Cancelar, presionar la tecla ESC no tendrá ningún efecto.
Las funciones AfxFormatString1
y AfxFormatString2
pueden ser útiles para dar formato al texto que aparece en un cuadro de mensaje.
Comentarios
La primera forma de esta función sobrecargada muestra una cadena de texto a lpszText
la que apunta en el cuadro de mensaje y usa nIDHelp
para describir un contexto de Ayuda. El contexto de Ayuda se usa para saltar a un tema de Ayuda asociado cuando el usuario presiona la tecla Ayuda (normalmente F1).
La segunda forma de la función usa el recurso de cadena con el id. nIDPrompt
para mostrar un mensaje en el cuadro de mensaje. La página de Ayuda asociada se encuentra mediante el valor de nIDHelp
. Si se usa el valor predeterminado de nIDHelp
(-1), el id. de recurso de cadena, nIDPrompt
, se usa en el contexto de ayuda. Si desea más información sobre cómo se definen contextos de Ayuda, consulte la nota técnica 28.
Ejemplo
// A simple message box, with only the OK button.
AfxMessageBox(_T("Simple message box."));
// A message box that uses a string from a string table
// with yes and no buttons and the stop icon.
// NOTE: nStringID is an integer that contains a valid id of
// a string in the current resource.
AfxMessageBox(nStringID, MB_YESNO | MB_ICONSTOP);