出于某种原因,当我使用下面的代码试图输出在给定的WIN32窗口鼠标光标的位置:无法输出光标位置调试串(WIN32)
//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_LPARAM
和GET_Y_LPARAM
传递到调试控制台? 谢谢。
完美地工作。谢谢。我一直在语言之间来回切换,并没有注意到这是一个问题。 – xec86
@ xec86:如果它对您有用,您正在使用错误的编译器设置。绝对没有理由使用ANSI字符编码。所有的Windows代码都应该使用Unicode编写,通过调用消耗或生成字符串的所有API的宽字符版本,从'char'切换到'wchar_t',并将所有字符串预设为'L'。一旦在命令行('/ DUNICODE/D_UNICODE')上定义了'UNICODE'和'_UNICODE'预处理器符号,编译器就会将您指向需要注意的位置。 – IInspectable
感谢您的提示。我想知道为什么在我已经保存的代码片段中添加了前缀L's并没有工作。 – xec86