2009-12-05 31 views
0

我正在處理預先存在的代碼庫,我正在尋找用戶在運行代碼的任何時間鍵入任何1-2位數字後跟隨輸入鍵,並將該數字傳遞給函數。目前,用戶輸入像這樣處理的:從Win32 C++獲取用戶輸入。 WPARAM鑄造爲int?

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    int wmId, wmEvent; 

    switch (message) 
    { 
    case WM_KEYDOWN: 
     Engine::GetInstance()->GetInput()->GetKeyboard()->SetKeyPressed(static_cast<int>(wParam)); 
     break; 
     //snip 

現在,我不知道的幾件事,

  • 一)爲什麼會來的keyPressed爲整數,而不是一個角色通過?

  • 二)什麼是「F1」在這種情況下AAAND

  • 三)如何使用這一個1-2位數字閱讀和傳遞進入,只有當被髮送的結果何苦呢?

+0

是否有你需要使用WM_KEYDOWN來做到這一點的原因?對於熟悉的鍵盤輸入,WM_CHAR將是一個更好的選擇 - 它將處理數字鍵盤和其他輸入怪異。 – ChrisV 2009-12-06 18:40:08

回答

4

a)這裏發送的值是虛擬鍵碼,不一定是字符。

b)參見虛擬鑰匙代碼列表here(在評論中給出)。 F1將由VK_F1(0x70)表示。

c)按數字時,將其添加到包含最後一位數字按下的字符串中。按任何其他鍵時,請清除字符串。當按下Enter時,根據字符串值進行操作。

編輯:這會在WM_KEYDOWN有點複雜,因爲您需要處理正常的數字鍵和數字鍵盤鍵。相反,它將更容易處理WM_CHAR消息,它接收wParam中的字符代碼。

+0

那麼我需要爲代表0-9的每個虛擬鍵進行切換嗎?它似乎應該能夠直接接受,不是嗎? – Chris 2009-12-05 01:53:19

+0

不需要開關,您可以使用類似於: 'if(key> ='0'&& key <='9')digitsPressed + =(char)key;' 對於數字,虛擬鍵碼與ASCII碼相同 – interjay 2009-12-05 01:57:20

+1

實際上,我的最後一條評論不會正確處理數字鍵盤鍵 - 請參閱我編輯的答案。 – interjay 2009-12-05 02:11:04