wsprintfW打印只有几十个
wsprintfW printing only tens?
我有一个跟踪栏,在某些时候它的值应该改变文本:
case WM_HSCROLL:
{
LRESULT pos = SendMessage(trackBar, TBM_GETPOS, 0, 0);
WCHAR buf[3];
wsprintfW(buf, L"%ld", pos);
SetWindowText(trackBarValue, (LPCSTR)buf);
}
break;
轨迹条的范围从15到35。由于某些原因,只有十位被打印到文本中(当我的trackbar的值在15到19之间时,文本为1;当我的trackbar的值在20到29之间时,文本为2;当我的trackbar的值在30到35之间时,文本为3)。
当然,我希望我的文本显示我的trackbar的绝对值,而不仅仅是它的十位!
我该怎么办?
编辑:运行调试器后,我知道,但确实成为跟踪栏的值。问题似乎与SetWindowText行有关。
编辑:一个解决方案是将SetWindowText更改为SetWindowTextW并删除(LPCSTR)强制转换。由于人。
您正在将宽字符字符串转换为简单字符串,这是错误的。你必须使用WideCharToMultiByte
,像这样:
size_t size = WideCharToMultiByte(CP_ACP, 0, buf, -1, NULL, 0, NULL, NULL);
CHAR *szTo = new CHAR[size];
WideCharToMultiByte(CP_ACP, 0, buf, -1, szTo, size, NULL, NULL);
// don't forget to delete[] szTo
或者,您可以将您的应用程序定义为unicode兼容,因此SetWindowText
宏将解析为SetWindowTextW
:
#define UNICODE
#define _UNICODE
#include <windows.h>
LRESULT被定义为LONG_PTR,每当PTR出现在名称中时,您应该期望它足够大以容纳指针。指针在32位上是4字节,在64位上是8字节,所以如果编译为64位,LRESULT将不适合long(4字节)。所以使用wsprintfW(buf, L"%llu", pos)
相关文章:
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- C ++如何使用UTF8十六进制代码打印UTF8符号?
- 为什么有时我输入一个整数,程序将第一个输入的数字打印成十进制数?
- C++声明双链表,使用两个 for 循环双向遍历列表并打印
- 打印十六进制字符
- 编译器始终打印十六进制/八进制数字
- 为什么这个程序没有打印返回的迭代器的正确第二个元素?
- 在 c++ 中从文本文件中读取两个十六进制值
- 使用哈希图打印第一个重复元素;
- 每秒需要发送十个周期的数据(每秒十个周期)
- 甚至是文件中的每个第十个数字,甚至是奇数
- 如何组织数十个类似的试用块
- 为什么第二个语句是打印十六进制值
- 一次打印 2 个字节的十六进制数字
- 将响应限制为每行十个五边形数
- 前十个自然数的平方和与平方和之差
- 将数十个非成员函数转换为方法
- 如何返回一个包含十个字符串的数组的引用
- wsprintfW打印只有几十个
- 为什么在函数指针或返回函数指针的函数编译前放上几十个*呢?