【问题标题】:Convert SHORT to TCHAR?将 SHORT 转换为 TCHAR?
【发布时间】:2013-12-18 17:58:30
【问题描述】:

我正在编写一个 Win32 程序,我想将 X pos 和 Y pos 文本输出到屏幕上,我想知道如何将 SHORT 转换为 TCHAR。不要使用 atoi 或 itoa 函数。

这是一个玩具程序,我想用文本输出鼠标的位置,但我不知道如何将 short 转换为 TCHAR。

【问题讨论】:

  • 使用std::to_string 或其宽字符兄弟,不要使用TCHAR 类型。 TCHAR 和朋友们是微软支持 Windows 9x 的技术。您的目标是 Windows 9x 吗?
  • 当您说“TCHAR”时,您的意思是“单个 TCHAR(它是 either charwchar_t 的别名,具体取决于您如何编译代码),或者你的意思是“一个 TCHAR 数组”,它又是一个 charwchar_t 的数组,换句话说,一个 C 风格的字符串。
  • 嗯,你在泄露 DC。此外,您在绘制周期之外进行绘制,这将导致重新绘制损坏。
  • 是的,我正在泄漏 DC,但我想知道为什么在绘制周期之外绘制会导致重绘损坏。以及 textout 功能的工作原理。
  • 如果您在 WM_MOUSEMOVE 中绘制并且您的整个窗口最终被 WM_PAINT 重绘,您将失去 100,100 处的文本显示。这是因为 WM_ERASEBKGND 会导致整个屏幕被擦除。您基本上需要存储 x,y 坐标并在 WM_PAINT 处理程序中绘制相同的东西

标签: c++ winapi short tchar


【解决方案1】:

也许您想将无符号整数转换为字符串。如果 TCHAR 被定义为 WCHAR,则可以使用 std::to_wstring:

short x = 123;    
std::wstring s = std::to_wstring(x);

然后将s.c_str() 转换为TCHAR*

【讨论】:

    【解决方案2】:

    你可以使用字符串流。

    #include <sstream>
    
    std::stringstream ss("");
    ss << nX << " " << nY;
    
    TextOut(GetDC(hWnd), 100, 100, reinterpret_cast<TCHAR *>(ss.str().c_str()), ss.str().size());
    

    【讨论】:

      【解决方案3】:
      SHORT myVal;
      TCHAR buf[32]; // 32 is big enough to contain a 16-bit int as a string
      
      _stprintf_s(buf,ARRAYSIZE(buf),"%hd",myVal);
      // now buf contains the text as a TCHAR
      

      【讨论】:

        猜你喜欢
        • 2011-11-13
        • 2013-10-18
        • 2011-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多