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