【问题标题】:What is the most appropriate way to concatenate with MFC's CString与 MFC 的 CString 连接最合适的方法是什么
【发布时间】:2015-04-29 01:05:23
【问题描述】:

我对 C++ 有点陌生,我的背景是 Java。我正在研究一种 hdc 打印方法。 我想知道将字符串和整数的组合连接成一个 CString 的最佳实践。我正在使用 MFC 的 CString。

int i = //the current page
int maxPage = //the calculated number of pages to print


CString pages = ("Page ") + _T(i) + (" of ") + _T(maxPage);

我希望它看起来像“第 1 页,共 2 页”。我当前的代码不起作用。我收到错误消息:

表达式必须是整数或枚举类型

我找到了更困难的方法来做我需要的事情,但我想知道是否有类似于我正在尝试的简单方法。谢谢!

【问题讨论】:

  • 问题是为什么要使用 MFC 及其古老的类,而不是普通的 C++ 字符串(即std::string)?当然,除非您必须维护旧版 MFC 代码库。
  • 我的雇主要求我在创建应用程序时使用 MFC。我将以下内容与 HDC 打印机一起使用。 CString str = m_CListCtrl.GetItemText(startrow, 0); dcPrinter.TextOut(startx+10, starty+1, _T(str), strlen(str));

标签: c++ mfc concatenation c-strings


【解决方案1】:

std::string 拥有你所需要的一切:

auto str = "Page " + std::to_string(i) + " of " + std::to_string(maxPage); 

正如评论中正确说明的那样,您可以通过 str.c_str() 访问底层 C 字符串。 Here 是一个活生生的例子。

【讨论】:

  • 好的。我喜欢只使用 str.c_str() 的想法。但是我收到错误:多个重载函数实例“std::to_string”。
【解决方案2】:

如果你有 C++11,你可以使用 std::to_string: std::string pages = std::string("Page ") + std::to_string(i) + (" of ") + std::to_string(maxPage);

如果您没有 C++11,您可以使用 ostringstreamboost::lexical_cast

【讨论】:

    【解决方案3】:

    你也可以使用字符串流类

    #include <sstream>
    #include <string>
    
    int main ()
    {
      std::ostringstream textFormatted;
    
      textFormatted << "Page " << i << " of " << maxPage;
    
      // To convert it to a string
      std::string s = textFormatted.str();
      return 0;
    }
    

    【讨论】:

      【解决方案4】:

      如果那是MFC's CString class,那么您可能想要Format,它与 sprintf 类似:

      CString pages;
      pages.Format(_T("Page %d of %d"), i, maxPage);
      

      即您可以在运行时使用常规的printf-format specifiers 替换数字来组装字符串。

      【讨论】:

      • 这被选为最佳答案,因为它是使用 MFC 的 CString 的最简单的解决方案。我已经编辑了我原来的问题。
      • 使用这个'CString MESSAGE, MESSAGE1; MESSAGE1 = CString("Elmer jacobs"); MESSAGE = CString("K") + MESSAGE1; pOutPut = (CStatic*)GetDlgItem(DK); pOutPut->SetWindowTextW(MESSAGE);'
      • @Dinesh 所以只是 CString 连接?我不认为这里更好,我们也有更多的部分和整数。这个问题也不需要SetWindowText(在一般情况下你可能不想要'W'),你的意思是在其他地方发布这个吗?
      • @Rup 非常感谢
      猜你喜欢
      • 1970-01-01
      • 2017-11-09
      • 2021-03-16
      • 2013-06-02
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多