我是win32 api的新手,作为我学习的一部分,我想打印出鼠标的坐标(LOWORD(lParam),HIWORD(lParam))。我该怎么做?OutputDebugString只获取LPCWSTR值,所以我需要将int转换成该值吗?还是有更好的方法去做?
发布于 2020-12-28 18:19:01
OutputDebugString只知道如何向调试器发送文本字符串。
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。
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);还有其他选择(比如使用itoa、std::stringstream、sprintf的更安全版本等)。无论如何,如果您想要向调试器的输出窗口发送大量消息,这可能会很麻烦。在关于您的问题的注释中链接到的许多帖子都是使用预处理宏、C++函数重载或模板来隔离格式化步骤的方法。所有这些解决方案都有取舍。
我个人的解决方案是从std::basic_streambuf派生出我自己类型的流缓冲区,并覆盖它的几个虚拟方法来将输出定向到附加的调试器。然后,我创建一个名为dbg的输出流实例,它使用我的字符串缓冲区。因此,当我想要输出到调试窗口时,我只使用C++格式的输出:
dbg << "Mouse coordinates: " << x << ", " << y << std::endl;在版本构建中,dbg是一个什么都不做的虚拟类,而且优化器足够聪明,不需要生成任何格式和输出代码。
https://stackoverflow.com/questions/65479507
复制相似问题