]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/window.cpp
implemented ScrollLines/Pages; fixed bug in Thaw()
[wxWidgets.git] / src / msw / window.cpp
index a87fdf163c5ef415ead6a1baa3befd04f32dfb04..b3a276a34a3967c3fd63985e7fbefd4eef8e4734 100644 (file)
@@ -940,6 +940,32 @@ void wxWindowMSW::ScrollWindow(int dx, int dy, const wxRect *prect)
     ::ScrollWindow(GetHwnd(), dx, dy, prect ? &rect : NULL, NULL);
 }
 
+static void ScrollVertically(HWND hwnd, int kind, int count)
+{
+    for ( int n = 0; n < count; n++ )
+    {
+        ::SendMessage(hwnd, WM_VSCROLL, kind, 0);
+    }
+}
+
+void wxWindowMSW::ScrollLines(int lines)
+{
+    bool down = lines > 0;
+
+    ScrollVertically(GetHwnd(),
+                     down ? SB_LINEDOWN : SB_LINEUP,
+                     down ? lines : -lines);
+}
+
+void wxWindowMSW::ScrollPages(int pages)
+{
+    bool down = pages > 0;
+
+    ScrollVertically(GetHwnd(),
+                     down ? SB_PAGEDOWN : SB_PAGEUP,
+                     down ? pages : -pages);
+}
+
 // ---------------------------------------------------------------------------
 // subclassing
 // ---------------------------------------------------------------------------
@@ -1194,6 +1220,25 @@ void wxWindowMSW::Clear()
     dc.Clear();
 }
 
+static inline void SendSetRedraw(HWND hwnd, bool on)
+{
+    ::SendMessage(hwnd, WM_SETREDRAW, (WPARAM)on, 0);
+}
+
+void wxWindowMSW::Freeze()
+{
+    SendSetRedraw(GetHwnd(), FALSE);
+}
+
+void wxWindowMSW::Thaw()
+{
+    SendSetRedraw(GetHwnd(), TRUE);
+
+    // we need to refresh everything or otherwise he invalidated area is not
+    // repainted
+    Refresh();
+}
+
 void wxWindowMSW::Refresh(bool eraseBack, const wxRect *rect)
 {
     HWND hWnd = GetHwnd();
@@ -4171,11 +4216,8 @@ int wxCharCodeMSWToWX(int keySym)
         case VK_NUMPAD8:    id = WXK_NUMPAD8; break;
         case VK_NUMPAD9:    id = WXK_NUMPAD9; break;
         case VK_MULTIPLY:   id = WXK_NUMPAD_MULTIPLY; break;
-        case 0xBB:          id = WXK_NUMPAD_ADD; break; // VK_OEM_PLUS
         case VK_ADD:        id = WXK_NUMPAD_ADD; break;
-        case 0xBD:          id = WXK_NUMPAD_SUBTRACT; break; // VK_OEM_MINUS
         case VK_SUBTRACT:   id = WXK_NUMPAD_SUBTRACT; break;
-        case 0xBE:          id = WXK_NUMPAD_DECIMAL; break; // VK_OEM_PERIOD
         case VK_DECIMAL:    id = WXK_NUMPAD_DECIMAL; break;
         case VK_DIVIDE:     id = WXK_NUMPAD_DIVIDE; break;
         case VK_F1:         id = WXK_F1; break;