2016-11-17 67 views
0

出於某種原因,當我使用下面的代碼試圖輸出在給定的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);
以這種方式更改代碼不會影響生成的優化代碼的質量。

我甚至嘗試類型轉換傳遞給OutputDebugStringLONG變量,因爲那是變量在POINT類的類型,沒有什麼區別。

有誰知道如何將值通過GET_X_LPARAMGET_Y_LPARAM傳遞到調試控制檯? 謝謝。

回答

4

這不是一個字符串連接,但加入.x.y的指針的","

cursorLocation.x + "," + cursorLocation.y 

相反,嘗試例如: -

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      
+0

完美地工作。謝謝。我一直在語言之間來回切換,並沒有注意到這是一個問題。 – xec86

+1

@ xec86:如果它對您有用,您正在使用錯誤的編譯器設置。絕對沒有理由使用ANSI字符編碼。所有的Windows代碼都應該使用Unicode編寫,通過調用消耗或生成字符串的所有API的寬字符版本,從'char'切換到'wchar_t',並將所有字符串預設爲'L'。一旦在命令行('/ DUNICODE/D_UNICODE')上定義了'UNICODE'和'_UNICODE'預處理器符號,編譯器就會將您指向需要注意的位置。 – IInspectable

+0

感謝您的提示。我想知道爲什麼在我已經保存的代碼片段中添加了前綴L's並沒有工作。 – xec86

2

字符串連接不整數的工作。 嘗試使用std::ostringstream

std::ostringstream out_stream; 
out_stream << cursorLocation.x << ", " << cursorLocation.y; 
OuputDebugString(out_stream.str().c_str());