将 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 char
或 wchar_t
的别名,具体取决于您如何编译代码),或者你的意思是“一个 TCHAR 数组”,它又是一个 char
或 wchar_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?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 std::wstring 转换为 const TCHAR*?