2013-02-21 85 views
0

我想學習WinAPI編程,但現在我陷入了這個問題 - 我想按下鍵並顯示它。我有這段代碼WinAPI - 顯示鍵按下

LRESULT CALLBACK WndProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam){ 
    switch(Msg){ 
    case WM_CREATE: 
     break; 


    case WM_CHAR: 
     char ascii_code = wParam; 
     unsigned int key_state = lParam; 
     SetWindowText(hwndStatic, TEXT("You pressed key "+ascii_code)); 

     break; 

    case WM_DESTROY: 
     PostQuitMessage(0); 
     break; 
    } 
    return DefWindowProc(hwnd, Msg, wParam, lParam); 
} 

但輸出很奇怪...它顯示隨機消息(每個鍵的不同)。我究竟做錯了什麼?

我試着調試它(一步一步),ascii_code包含按鍵,但TEXT()不顯示它。

+0

你不能一個字符添加到字符的字符串。 – 2013-02-21 08:17:09

回答

0

你不能像這樣加在一起的字符:

"You pressed key "+ascii_code; 

這將需要的"You pressed key "地址,例如1000併爲其添加ascii代碼值,例如95.

該函數將嘗試打印內存地址爲1095的字符串。它將打印所有內存,直到它遇到空字符(零)。這可能是任何事情。

您需要使用C函數來構建您的字符串,或者,因爲這是標記爲C++使用std::string

std::string message = "You pressed key "; 
message += ascii_code; 

SetWindowText(hwndStatic, TEXT(message.c_str())) 
+0

啊,打我吧:-) – Fiktik 2013-02-21 08:27:05

+0

幾乎相同的答案在一個點(c: – 2013-02-21 08:28:16

+0

@PeterWood我解決了它的解決方案是更改std :: string消息=「你按下了鍵」;到std :: wstring Lmessage = L「你按下了鍵」;。謝謝你的幫助 – Jakolcz 2013-02-21 09:03:15

-1
"You pressed key "+ascii_code 

不能連接這樣的字符串。 "foo bar"的真實類型是const char[8] - 一個原始的C類字符數組。當你在它上面應用+時,它會衰減到一個指向它的第一個元素的指針,並且操作在指針上進行。這意味着你最終會打印一些隨機數據,這些數據是基於這個指針最終指向哪裏的。

如果你想一個角色串聯爲一個字符串,你必須使用更智能的字符串表示,如std::string

(std::string("you pressed key ") + ascii_code).c_str(); 
+0

好吧,那太尷尬了! – 2013-02-21 08:26:10