将 SHORT 转换为 TCHAR?

Posted

技术标签:

【中文标题】将 SHORT 转换为 TCHAR?【英文标题】:Convert SHORT to 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 处理程序中绘制相同的东西 【参考方案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

【讨论】:

以上是关于将 SHORT 转换为 TCHAR?的主要内容,如果未能解决你的问题,请参考以下文章

将 TCHAR 转换为 strstr 函数的 char*

如何将 std::wstring 转换为 const TCHAR*?

如何在 C++ 中将 Cstring 转换为 TCHAR*?

使用 TCHAR 时出错,无法转换为 wchar_t

怎么把char型数组转换为lpwstr

将 CString 转换为字符数组?