Swprintf不转换值
swprintf not converting values
我试图使用该函数作为在Win32应用程序中显示鼠标的X和Y值的方法。它替换了x的值,但是对于y,它将其设为0。我不知道为什么,我在应用程序期间设置了一个断点。Y不为0
编辑我将数据类型更改为int,由于某种原因,它现在可以工作了。我最初在long long中使用它,因为我处理输入的方式不同,而函数需要这种数据类型。我忘了换回去了。我不太确定为什么它没有工作与长长虽然。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
static long long x = -1, y = -1;
switch (message)
{
case WM_MOUSEMOVE:
{
x = LOWORD(lParam);
y = HIWORD(lParam);
InvalidateRect(hWnd, 0, TRUE);
break;
}
case WM_COMMAND:
wmId = LOWORD(lParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
{
hdc = BeginPaint(hWnd, &ps);
RECT rect;
rect.left = x + 20;
rect.top = y - 20;
rect.right = x + 200;
rect.bottom = y + 200;
wchar_t displayMessage[100];
swprintf(displayMessage, 100, L"(%d, %d)", x, y);
DrawText(hdc, displayMessage, -1, &rect, NULL);
EndPaint(hWnd, &ps);
break;
}
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
您忘记将缓冲区长度作为第二个参数,请参阅文档。
wchar_t displayMessage[100];
swprintf(displayMessage, 100, L"(%d, %d)", x, y);
更新:使用%lld
long long
。
%d
不是long long
的正确标识符。
如果您坚持使用C语言swprintf
,则将变量更改为int
。或者使用%lld
。或者按照下面的方式进行转换。
swprintf(displayMessage, 100, L"(%d, %d)", (int)x, (int)y);
编辑:如果你不喜欢C语言,你不必在这个上下文中使用它。
无论使用什么整数类型,这都可以工作。
std::wstringstream stream;
stream << L"(" << x << L", " << y << L")";
DrawText(hdc, stream.str().c_str(), -1, &rect, NULL);
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- C++ 错误:由于 swprintf 而从 'int' 到 'const wchar_t* 的转换无效
- Swprintf不转换值