提供了许多函数对 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 参数的开头进行搜索。
如果已将 lpszFullString 设置为 NULL,或者此函数到达了 lpszFullString 的末尾但未找到 iSubString+1 个指定分隔符,则此函数会返回 FALSE。 如果 lpszFullString 已设置为 NULL,则不会修改 rString 参数的原始值;否则,如果无法为指定索引提取子字符串,则会将 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
在 nIDS 标识的模板字符串资源中,将 lpsz1 指向的字符串替换为字符 "%1" 的任何实例。
void AfxFormatString1(
CString& rString,
UINT nIDS,
LPCTSTR lpsz1);
参数
rString
对在执行替换后将包含生成字符串的 CString 对象的引用。
nIDS
将对其执行替换的模板字符串的资源 ID。
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
在 nIDS 标识的模板字符串资源中,将 lpsz1 指向的字符串替换为字符 "%1" 的任何实例,将 lpsz2 指向的字符串替换为字符 "%2" 的任何实例。
void AfxFormatString2(
CString& rString,
UINT nIDS,
LPCTSTR lpsz1,
LPCTSTR lpsz2);
参数
rString
对在执行替换后将包含生成字符串的 CString 的引用。
nIDS
将对其执行替换的模板字符串的字符串表 ID。
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
消息的帮助上下文 ID;0 表示将使用应用程序的默认帮助上下文。
nIDPrompt
一个独一无二的 ID,用于引用字符串表中的字符串。
返回值
如果因内存不足而无法显示消息框,则为零;否则返回以下值之一:
IDABORT:已选择“中止”按钮。IDCANCEL:已选择“取消”按钮。IDIGNORE:已选择“忽略”按钮。IDNO:已选择“否”按钮。IDOK:已选择“确定”按钮。IDRETRY:已选择“重试”按钮。IDYES:已选择“是”按钮。
如果消息框有“取消”按钮,则按下 ESC 键或选择“取消”按钮时,将返回 IDCANCEL 值。 如果消息框没有“取消”按钮,则按 ESC 键不起作用。
函数 AfxFormatString1 和 AfxFormatString2 可用于设置消息框中显示的文本的格式。
注解
这个重载的函数的第一种形式显示消息框中 lpszText 所指向的文本字符串,并使用 nIDHelp 来描述帮助上下文。 当用户按下帮助键(通常为 F1)时,帮助上下文用于跳转到关联的帮助主题。
此函数的第二种形式使用 ID 为 nIDPrompt 的字符串资源在消息框中显示消息。 通过值 nIDHelp 找到关联的帮助页。 如果使用 nIDHelp 的默认值 (-1),则字符串资源 ID 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);