瀏覽代碼

Simplified character input.

Camilla Berglund 13 年之前
父節點
當前提交
d6d5fb2684
共有 1 個文件被更改,包括 17 次插入52 次删除
  1. 17 52
      src/win32_window.c

+ 17 - 52
src/win32_window.c

@@ -305,37 +305,6 @@ static int translateKey(WPARAM wParam, LPARAM lParam)
 }
 
 
-//========================================================================
-// Translates a Windows key to Unicode
-//========================================================================
-
-static void translateChar(_GLFWwindow* window, DWORD wParam, DWORD lParam)
-{
-    BYTE keyboard_state[256];
-    WCHAR unicode_buf[10];
-    UINT scan_code;
-    int i, num_chars;
-
-    GetKeyboardState(keyboard_state);
-
-    // Derive scan code from lParam and action
-    scan_code = (lParam & 0x01ff0000) >> 16;
-
-    num_chars = ToUnicode(
-        wParam,          // virtual-key code
-        scan_code,       // scan code
-        keyboard_state,  // key-state array
-        unicode_buf,     // buffer for translated key
-        10,              // size of translated key buffer
-        0                // active-menu flag
-    );
-
-    // Report characters
-    for (i = 0;  i < num_chars;  i++)
-        _glfwInputChar(window, (int) unicode_buf[i]);
-}
-
-
 //========================================================================
 // Window callback function (handles window events)
 //========================================================================
@@ -459,13 +428,15 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg,
         case WM_SYSKEYDOWN:
         {
             _glfwInputKey(window, translateKey(wParam, lParam), GLFW_PRESS);
-
-            if (_glfwLibrary.charCallback)
-                translateChar(window, (DWORD) wParam, (DWORD) lParam);
-
             break;
         }
 
+        case WM_CHAR:
+        {
+            _glfwInputChar(window, wParam);
+            return 0;
+        }
+
         case WM_KEYUP:
         case WM_SYSKEYUP:
         {
@@ -1177,28 +1148,22 @@ void _glfwPlatformPollEvents(void)
 
     while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
     {
-        switch (msg.message)
+        if (msg.message == WM_QUIT)
         {
-            case WM_QUIT:
-            {
-                // Treat WM_QUIT as a close on all windows
-
-                window = _glfwLibrary.windowListHead;
-                while (window)
-                {
-                    _glfwInputWindowCloseRequest(window);
-                    window = window->next;
-                }
-
-                break;
-            }
+            // Treat WM_QUIT as a close on all windows
 
-            default:
+            window = _glfwLibrary.windowListHead;
+            while (window)
             {
-                DispatchMessage(&msg);
-                break;
+                _glfwInputWindowCloseRequest(window);
+                window = window->next;
             }
         }
+        else
+        {
+            TranslateMessage(&msg);
+            DispatchMessage(&msg);
+        }
     }
 
     // LSHIFT/RSHIFT fixup (keys tend to "stick" without this fix)