首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法将游标位置输出到调试字符串(WIN32)

无法将游标位置输出到调试字符串(WIN32)
EN

Stack Overflow用户
提问于 2016-11-17 20:16:13
回答 2查看 121关注 0票数 0

由于某些原因,当我试图使用以下代码输出鼠标光标在给定的WIN32窗口中的位置时:

代码语言:javascript
运行
复制
//Global Variable
POINT cursorLocation;

// Win32 Windowing subsystem code redacted

LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){

cursorLocation.x = GET_X_LPARAM(lParam);
cursorLocation.y = GET_Y_LPARAM(lParam);

 switch(message){
   case WM_MOUSEMOVE:
   // mouse movement handle
   OutputDebugString(cursorLocation.x + "," + cursorLocation.y);
   OutputDebugString("\n");
   // WM_MOUSEMOVE break
   break;
 }
}

现在,当我运行程序并移动鼠标时,以下文本将被记录到控制台:

较小的数据类型导致数据丢失。 如果这是有意的,则应使用适当的位掩码掩蔽强制转换的源。 例如: char c= (i & 0xFF); 以这种方式更改代码不会影响结果优化代码的质量。

我甚至尝试将传递给OutputDebugString的变量类型转换为LONG,因为这是POINT类中变量的类型,没有区别。

有人知道如何将值通过GET_X_LPARAMGET_Y_LPARAM传递到调试控制台吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-17 20:18:55

这不是字符串连接,而是将.x.y添加到指向","的指针中。

代码语言:javascript
运行
复制
cursorLocation.x + "," + cursorLocation.y

相反,试着例如:

代码语言:javascript
运行
复制
char s[256];
sprintf_s(s, "%d,%d", cursorLocation.x, cursorLocation.y);
OutputDebugStringA(s); // added 'A' after @IInspectable's comment, but
                       // using UNICODE and wchar_t might be better indeed                    
票数 4
EN

Stack Overflow用户

发布于 2016-11-17 20:25:33

字符串级联不适用于整数。尝试使用std::ostringstream

代码语言:javascript
运行
复制
std::ostringstream out_stream;
out_stream << cursorLocation.x << ", " << cursorLocation.y;
OuputDebugString(out_stream.str().c_str());
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40664225

复制
相关文章

相似问题

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