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

Encabezadoafxwin.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

Encabezadoafxwin.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

Encabezadoafxwin.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

Encabezadoafxwin.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);

Consulte también

Macros y globales
CStringT (clase)