CString Форматирование и отображение окна сообщений

Для форматирования и анализа CString объектов предоставляется ряд функций. Эти функции можно использовать всякий раз, когда требуется управлять CString объектами, но они особенно полезны для форматирования строк, которые будут отображаться в текстовом поле сообщения.

Эта группа функций также включает глобальную подпрограмму для отображения поля сообщения.

CString Функции

Имя Описание
AfxExtractSubString Извлекает подстроки, разделенные одним символом из заданной исходной строки.
AfxFormatString1 Заменяет заданную строку символами формата "%1" в строке, содержащейся в строковой таблице.
AfxFormatString2 Заменяет две строки символами формата "%1" и "%2" в строке, содержащейся в строковой таблице.
AfxMessageBox Отображает окно сообщения.

Требования

Верхний колонтитулafxwin.h

AfxExtractSubString

Эту глобальную функцию можно использовать для извлечения подстроки из заданной исходной строки.

BOOL AFXAPI AfxExtractSubString (
    CString& rString,
    LPCTSTR lpszFullString,
    int iSubString,
    TCHAR chSep  = '\n');

Параметры

rString
Ссылка на CString объект, который получит отдельную подстроку.

lpszFullString
Строка, содержащая полный текст строки для извлечения из.

iSubString
Отсчитываемый от нуля индекс подстроки для извлечения из lpszFullString.

chSep
Символ разделителя, используемый для разделителей.

Возвращаемое значение

TRUE Значение , если функция успешно извлекла подстроку по указанному индексу; FALSEв противном случае .

Замечания

Эта функция полезна для извлечения нескольких подстроок из исходной строки, когда известный один символ отделяет каждую подстроку. Эта функция выполняет поиск с начала lpszFullString параметра при каждом вызове.

Эта функция возвращается FALSE , если lpszFullString задано NULL значение или функция достигает конца lpszFullString без поиска iSubString+1 вхождения указанного символа разделителя. Параметр rString не будет изменен из исходного значения, если lpszFullString задано NULLзначение; в противном случае параметр задается пустой строкой, rString если подстрока не удалось извлечь для указанного индекса.

Пример

// 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);
}

Требования

Верхний колонтитулafxwin.h

AfxFormatString1

Заменяет строку, указываемую lpsz1 на любые экземпляры символов "%1" в ресурсе строки шаблона, определяемом nIDS.

void  AfxFormatString1(
    CString& rString,
    UINT nIDS,
    LPCTSTR lpsz1);

Параметры

rString
Ссылка на CString объект, содержащий результирующую строку после выполнения подстановки.

nIDS
Идентификатор ресурса строки шаблона, на которой будет выполнена подстановка.

lpsz1
Строка, которая заменит символы "%1" формата в строке шаблона.

Замечания

Только что сформированная строка хранится в rString. Например, если строка в строковой таблице равна "File %1 not found"и lpsz1 равна "C:\MYFILE.TXT", rString то будет содержать строку "File C:\MYFILE.TXT not found". Эта функция полезна для форматирования строк, отправленных в поля сообщений и другие окна.

Если символы "%1" форматирования отображаются в строке несколько раз, будет выполнено несколько подстановок.

Пример

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
}

Требования

Верхний колонтитулafxwin.h

AfxFormatString2

Заменяет строку, указываемую lpsz1 на любые экземпляры символов"%1", и строка, на которую указывает lpsz2 любой экземпляр символов"%2", в ресурсе строки шаблона, определяемом.nIDS

void AfxFormatString2(
    CString& rString,
    UINT nIDS,
    LPCTSTR lpsz1,
    LPCTSTR lpsz2);

Параметры

rString
Ссылка на CString строку, которая будет содержать результирующую строку после выполнения подстановки.

nIDS
Идентификатор строки таблицы шаблона, для которой будет выполнена подстановка.

lpsz1
Строка, которая заменит символы "%1" формата в строке шаблона.

lpsz2
Строка, которая заменит символы "%2" формата в строке шаблона.

Замечания

Только что сформированная строка хранится в rString. Например, если строка в строковой таблице имеет значение "File %1 not found in directory %2", lpsz1 указывает на "MYFILE.TXT"и lpsz2 указывает на "C:\MYDIR", то rString будет содержать строку "File MYFILE.TXT not found in directory C:\MYDIR".

Если символы "%1" форматирования или "%2" отображаются в строке несколько раз, будет выполнено несколько подстановок. Они не должны быть в числовом порядке.

Пример

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
}

Требования

Верхний колонтитулafxwin.h

AfxMessageBox

Отображает окно сообщения на экране.

int AfxMessageBox(
    LPCTSTR lpszText,
    UINT nType = MB_OK,
    UINT nIDHelp = 0);

int AFXAPI AfxMessageBox(
    UINT nIDPrompt,
    UINT nType = MB_OK,
    UINT nIDHelp = (UINT) -1);

Параметры

lpszText
Указывает на CString строку, завершающуюся значением NULL, содержащую сообщение, отображаемое в окне сообщения.

nType
Стиль окна сообщения. Примените к поле любой из стилей поля сообщения.

nIDHelp
Идентификатор контекста справки для сообщения; 0 указывает, что будет использоваться контекст справки по умолчанию приложения.

nIDPrompt
Уникальный идентификатор, используемый для ссылки на строку в строковой таблице.

Возвращаемое значение

Ноль, если недостаточно памяти для отображения поля сообщения; в противном случае возвращается одно из следующих значений:

  • IDABORT Выбрана кнопка "Прерывание".

  • IDCANCEL Выбрана кнопка "Отмена".

  • IDIGNORE Выбрана кнопка "Игнорировать".

  • IDNO Кнопка "Нет" выбрана.

  • IDOK Выбрана кнопка "ОК".

  • IDRETRY Выбрана кнопка повтора.

  • IDYES Выбрана кнопка "Да".

Если в поле сообщения есть кнопка "Отмена", значение будет возвращено, IDCANCEL если нажатие клавиши ESC или кнопка "Отмена" выбрана. Если в поле сообщения нет кнопки "Отмена", нажатие клавиши ESC не действует.

Функции AfxFormatString1 и AfxFormatString2 могут быть полезны в форматировании текста, который отображается в окне сообщения.

Замечания

Первая форма перегруженной функции отображает текстовую строку, на которую указывает lpszText поле сообщения и используется nIDHelp для описания контекста справки. Контекст справки используется для перехода к связанному разделу справки, когда пользователь нажимает клавишу справки (обычно F1).

Вторая форма функции использует строковый ресурс с идентификатором nIDPrompt для отображения сообщения в окне сообщения. Связанная страница справки найдена по значению nIDHelp. Если значение nIDHelp по умолчанию используется (-1), строковый идентификатор ресурса, nIDPromptиспользуется для контекста справки. Дополнительные сведения об определении контекстов справки см . в техническом примечание 28.

Пример

// 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);

См. также

Макросы и глобальные
CStringT Класса