0

STRINGTABLE 项目:

  • ID:IDS_TPL_SWAP_CONFIRMATION
  • 价值:5149
  • 标题:Swap assignments:\n\n%1 - %2 [%3]\n%4 - %5 [%6]\n\nPlease confirm.

有时当我尝试这段代码时:

CString strPrompt = _T("");
strPrompt.FormatMessage(IDS_TPL_SWAP_CONFIRMATION,
    m_pEntry->GetMeetingDateAsString(),
    (LPCTSTR)strExistingName,
    (LPCTSTR)strExistingDescription,
    pReplacement->GetMeetingDateAsString(),
    (LPCTSTR)getter(pReplacement),
    (LPCTSTR)strReplacementDescription);

我有时会发现该%1值被重复%4,即使pReplacement->GetMeetingDateAsString()实际上是不同的日期。

最后我改变了这样的代码:

strPrompt.LoadString(IDS_TPL_SWAP_CONFIRMATION);
strPrompt.Replace(_T("%1"), m_pEntry->GetMeetingDateAsString());
strPrompt.Replace(_T("%2"), strExistingName);
strPrompt.Replace(_T("%3"), strExistingDescription);
strPrompt.Replace(_T("%4"), pReplacement->GetMeetingDateAsString());
strPrompt.Replace(_T("%5"), getter(pReplacement));
strPrompt.Replace(_T("%6"), strReplacementDescription);

保证这对我有用。我正在使用该FormatMessage语法,因为我的应用程序支持超过 50 种语言,而且我不能确定每种语言都希望数据以相同的顺序排列。

如前所述,所有数据都是正确的,只是在某些情况下它会在最终输出中将第一个日期重新用于第四个项目。有什么我需要知道的问题FormatString吗?

我的解决方法在会议时间对我来说效果很好。

4

0 回答 0