Sdílet prostřednictvím


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 lpszFullStringkteré se má extrahovat .

chSep
Znak oddělovače použitý k oddělovači podřetětěží.

Návratová hodnota

TRUEpokud 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 nIDPromptprostř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);

Viz také

Makra a globální objekty
CStringT Třída