gpt4 book ai didi

c++ - 变量不更新的 TextOut 函数

转载 作者:行者123 更新时间:2023-11-27 23:40:15 25 4
gpt4 key购买 nike

我正在 VS 2019 中制作桌面应用程序,并尝试使用 TextOut 打印变量 x。我知道问题不在于我改变 x 变量的方式,因为它使用 OutputDebugString 正确输出。我对 TextOut 做错了什么?

这是我的代码的相关部分:

case WM_PAINT:
{
float x = 1;
while (x < 100) {
x = x + 0.01;

PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
std::string s = std::to_string(x);
std::wstring stemp = s2ws(s);
LPCWSTR sw = stemp.c_str();
OutputDebugString(sw);
TextOut(hdc, x * 100, 150, sw, 3);
EndPaint(hWnd, &ps);
}
}

我希望缓慢增加的数字(1.01、1.02、1.03 等)停止在 100,但我在窗口中看到停滞的 1.0。任何帮助将不胜感激。

最佳答案

对于每个 WM_PAINT 消息,您只需调用一次 (Begin|End)Paint()。这是因为 BeginPaint() 将绘图区域裁剪为仅包括已失效的区域,然后验证窗口。因此,在您的示例中,循环的第二次和后续迭代将无处可画,因为剪辑区域将为空。

您需要将对 (Begin|End)Paint() 的调用移到循环之外。

也无需手动将您的 std::string 数据转换为 std::wstring,只需使用 OutputDebugString()< 的 ANSI 版本TextOut() 并让它们在内部为您转换为 Unicode。

case WM_PAINT: {
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);

float x = 1;
while (x < 100) {
x = x + 0.01;
std::string s = std::to_string(x);
OutputDebugStringA(s.c_str());
TextOutA(hdc, x * 100, 150, s.c_str(), 3);
}

EndPaint(hWnd, &ps);
break;
}

如果你真的想使用 std::wstring 那么只需使用 std::to_wstring() 而不是 std::to_string():

case WM_PAINT: {
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);

float x = 1;
while (x < 100) {
x = x + 0.01;
std::wstring s = std::to_wstring(x);
OutputDebugStringW(s.c_str());
TextOutW(hdc, x * 100, 150, s.c_str(), 3);
}

EndPaint(hWnd, &ps);
break;
}

关于c++ - 变量不更新的 TextOut 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55696765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com