出於某種原因,當我使用下面的代碼試圖輸出在給定的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