CString
Formátování a zobrazení pole se zprávami
K formátování a analýze CString
objektů se poskytuje řada funkcí. Tyto funkce můžete použít vždy, když budete muset manipulovat s CString
objekty, ale jsou užitečné zejména pro formátování řetězců, které se zobrazí v textu pole se zprávou.
Tato skupina funkcí obsahuje také globální rutinu pro zobrazení pole se zprávou.
CString
Funkce
Název | Popis |
---|---|
AfxExtractSubString |
Extrahuje podřetězce oddělené jedním znakem od daného zdrojového řetězce. |
AfxFormatString1 |
Nahradí daný řetězec znaky formátu %1 v řetězci obsaženém v tabulce řetězců. |
AfxFormatString2 |
Nahradí dva řetězce znaky formátu %1 a %2 v řetězci obsaženém v tabulce řetězců. |
AfxMessageBox |
Zobrazí okno se zprávou. |
Požadavky
Záhlaví afxwin.h
AfxExtractSubString
Tuto globální funkci lze použít k extrakci podřetězce z daného zdrojového řetězce.
BOOL AFXAPI AfxExtractSubString (
CString& rString,
LPCTSTR lpszFullString,
int iSubString,
TCHAR chSep = '\n');
Parametry
rString
Odkaz na CString
objekt, který obdrží jednotlivý podřetěr.
lpszFullString
Řetězec obsahující celý text řetězce, ze který se má extrahovat.
iSubString
Index dílčího řetězce založeného na nule, ze lpszFullString
které se má extrahovat .
chSep
Znak oddělovače použitý k oddělovači podřetětěží.
Návratová hodnota
TRUE
pokud funkce úspěšně extrahovali podřetěc na poskytnutém indexu; v opačném případě . FALSE
Poznámky
Tato funkce je užitečná pro extrakci více podřetězců ze zdrojového řetězce, když známý jeden znak odděluje jednotlivé podřetězce. Tato funkce hledá od začátku parametru lpszFullString
při každém zavolání.
Tato funkce se vrátí FALSE
, pokud lpszFullString
je nastavená NULL
hodnota nebo funkce dosáhne konce lpszFullString
bez nalezení iSubString
+1 výskytů zadaného znaku oddělovače. Parametr rString
nebude změněn z původní hodnoty, pokud lpszFullString
byl nastaven na NULL
; v opačném případě je parametr nastaven na prázdný řetězec, rString
pokud nelze extrahovat podřetězce pro zadaný index.
Příklad
// 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);
}
Požadavky
Záhlaví afxwin.h
AfxFormatString1
Nahradí řetězec odkazem lpsz1
na všechny instance znaků "%1"
v prostředku řetězce šablony identifikovaného řetězcem nIDS
.
void AfxFormatString1(
CString& rString,
UINT nIDS,
LPCTSTR lpsz1);
Parametry
rString
Odkaz na CString
objekt, který bude obsahovat výsledný řetězec po provedení nahrazení.
nIDS
ID prostředku řetězce šablony, na kterém bude náhrada provedena.
lpsz1
Řetězec, který nahradí znaky "%1"
formátu v řetězci šablony.
Poznámky
Nově vytvořený řetězec je uložen v rString
. Pokud je například řetězec v řetězcové tabulce "File %1 not found"
a lpsz1
je roven "C:\MYFILE.TXT"
, pak rString
bude obsahovat řetězec "File C:\MYFILE.TXT not found"
. Tato funkce je užitečná pro formátování řetězců odesílaných do polí zpráv a dalších oken.
Pokud se znaky "%1"
formátu zobrazí v řetězci více než jednou, provede se více nahrazení.
Příklad
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
}
Požadavky
Záhlaví afxwin.h
AfxFormatString2
Nahradí řetězec odkazem lpsz1
na všechny výskyty znaků "%1"
a řetězec, na který lpsz2
odkazuje všechny výskyty znaků "%2"
, v prostředku řetězce šablony identifikovaném řetězcem nIDS
.
void AfxFormatString2(
CString& rString,
UINT nIDS,
LPCTSTR lpsz1,
LPCTSTR lpsz2);
Parametry
rString
Odkaz na CString
ten, který bude obsahovat výsledný řetězec po provedení nahrazení.
nIDS
ID řetězcové tabulky řetězce šablony, na kterém bude náhrada provedena.
lpsz1
Řetězec, který nahradí znaky "%1"
formátu v řetězci šablony.
lpsz2
Řetězec, který nahradí znaky "%2"
formátu v řetězci šablony.
Poznámky
Nově vytvořený řetězec je uložen v rString
. Pokud je například řetězec v tabulce "File %1 not found in directory %2"
řetězců , lpsz1
odkazuje na "MYFILE.TXT"
a lpsz2
odkazuje na "C:\MYDIR"
, pak rString
bude obsahovat řetězec "File MYFILE.TXT not found in directory C:\MYDIR"
.
Pokud se znaky "%1"
formátu nebo "%2"
zobrazí v řetězci více než jednou, provede se více nahrazení. Nemusí být v číselném pořadí.
Příklad
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
}
Požadavky
Záhlaví afxwin.h
AfxMessageBox
Zobrazí na obrazovce okno se zprávou.
int AfxMessageBox(
LPCTSTR lpszText,
UINT nType = MB_OK,
UINT nIDHelp = 0);
int AFXAPI AfxMessageBox(
UINT nIDPrompt,
UINT nType = MB_OK,
UINT nIDHelp = (UINT) -1);
Parametry
lpszText
Odkazuje na CString
objekt nebo řetězec ukončený hodnotou null obsahující zprávu, která se má zobrazit v poli zprávy.
nType
Styl pole zprávy. Na toto pole použijte některý ze stylů pole se zprávou.
nIDHelp
ID kontextu nápovědy pro zprávu; 0 označuje, že se použije výchozí kontext nápovědy aplikace.
nIDPrompt
Jedinečné ID použité k odkazování na řetězec v řetězcové tabulce.
Návratová hodnota
Nula, pokud není dostatek paměti pro zobrazení pole zprávy; v opačném případě se vrátí jedna z následujících hodnot:
IDABORT
Bylo vybráno tlačítko Přerušit.IDCANCEL
Bylo vybráno tlačítko Zrušit.IDIGNORE
Bylo vybráno tlačítko Ignorovat.IDNO
Vybrali jsme tlačítko Ne.IDOK
Bylo vybráno tlačítko OK.IDRETRY
Bylo vybráno tlačítko Opakovat.IDYES
Bylo vybráno tlačítko Ano.
Pokud má okno se zprávou tlačítko Storno, vrátí se hodnota, IDCANCEL
pokud je stisknuta klávesa ESC nebo je vybráno tlačítko Storno. Pokud okno se zprávou neobsahuje tlačítko Storno, stisknutí klávesy ESC nemá žádný vliv.
Funkce AfxFormatString1
a AfxFormatString2
můžou být užitečné při formátování textu, který se zobrazí v poli se zprávou.
Poznámky
První forma této přetížené funkce zobrazí textový řetězec odkazující na lpszText
pole zprávy a používá nIDHelp
k popisu kontextu nápovědy. Kontext nápovědy slouží k přechodu na přidružené téma nápovědy, když uživatel stiskne klávesu Nápověda (obvykle F1).
Druhá forma funkce používá prostředek řetězce s ID nIDPrompt
k zobrazení zprávy v poli zprávy. Přidružená stránka nápovědy se nachází prostřednictvím hodnoty nIDHelp
. Pokud se použije výchozí hodnota nIDHelp
(-1), použije se pro kontext nápovědy ID nIDPrompt
prostředku řetězce. Další informace o definování kontextů nápovědy naleznete v technické poznámce 28.
Příklad
// 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);