首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OutputDebugString a int in win32

OutputDebugString a int in win32
EN

Stack Overflow用户
提问于 2020-12-28 14:52:46
回答 1查看 1.2K关注 0票数 0

我是win32 api的新手,作为我学习的一部分,我想打印出鼠标的坐标(LOWORD(lParam),HIWORD(lParam))。我该怎么做?OutputDebugString只获取LPCWSTR值,所以我需要将int转换成该值吗?还是有更好的方法去做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-28 18:19:01

OutputDebugString只知道如何向调试器发送文本字符串。

代码语言:javascript
复制
OutputDebugString("This works because this is a string.\n");
int x = GetMouseXCoordinate();
OutputDebugString(x);  // This doesn't work because x isn't a string.

如果您想要打印一些已经不是文本字符串的内容,那么首先必须使用文本表示形式创建一个字符串,然后将其发送到OutputDebugString

代码语言:javascript
复制
int x = GetMouseXCoordinate();
// Here's a method commonly used in C and C++ to format the value yourself.
char message[63];
sprintf(message, "%d", x);
OutputDebugString(message);

还有其他选择(比如使用itoastd::stringstreamsprintf的更安全版本等)。无论如何,如果您想要向调试器的输出窗口发送大量消息,这可能会很麻烦。在关于您的问题的注释中链接到的许多帖子都是使用预处理宏、C++函数重载或模板来隔离格式化步骤的方法。所有这些解决方案都有取舍。

我个人的解决方案是从std::basic_streambuf派生出我自己类型的流缓冲区,并覆盖它的几个虚拟方法来将输出定向到附加的调试器。然后,我创建一个名为dbg的输出流实例,它使用我的字符串缓冲区。因此,当我想要输出到调试窗口时,我只使用C++格式的输出:

代码语言:javascript
复制
dbg << "Mouse coordinates: " << x << ", " << y << std::endl;

在版本构建中,dbg是一个什么都不做的虚拟类,而且优化器足够聪明,不需要生成任何格式和输出代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65479507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档