Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp	(revision 35246)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp	(revision 35247)
@@ -141,4 +141,9 @@
 }
 
+double UIMachineView::aspectRatio() const
+{
+    return frameBuffer() ? (double)(frameBuffer()->width()) / frameBuffer()->height() : 0;
+}
+
 void UIMachineView::sltMachineStateChanged()
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.h	(revision 35246)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.h	(revision 35247)
@@ -63,4 +63,7 @@
     /* Public members: */
     virtual void normalizeGeometry(bool /* bAdjustPosition = false */) = 0;
+
+    /* Framebuffer aspect ratio: */
+    double aspectRatio() const;
 
 signals:
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.cpp	(revision 35246)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.cpp	(revision 35247)
@@ -150,4 +150,50 @@
     return QIWithRetranslateUI2<QMainWindow>::event(pEvent);
 }
+
+#ifdef Q_WS_WIN
+bool UIMachineWindowScale::winEvent(MSG *pMessage, long *pResult)
+{
+    /* Try to keep aspect ratio during window resize if:
+     * 1. machine view exists and 2. event-type is WM_SIZING and 3. shift key is NOT pressed: */
+    if (machineView() && pMessage->message == WM_SIZING && !(QApplication::keyboardModifiers() & Qt::ShiftModifier))
+    {
+        if (double dAspectRatio = machineView()->aspectRatio())
+        {
+            RECT *pRect = reinterpret_cast<RECT*>(pMessage->lParam);
+            switch (pMessage->wParam)
+            {
+                case WMSZ_LEFT:
+                case WMSZ_RIGHT:
+                {
+                    pRect->bottom = pRect->top + (double)(pRect->right - pRect->left) / dAspectRatio;
+                    break;
+                }
+                case WMSZ_TOP:
+                case WMSZ_BOTTOM:
+                {
+                    pRect->right = pRect->left + (double)(pRect->bottom - pRect->top) * dAspectRatio;
+                    break;
+                }
+                case WMSZ_BOTTOMLEFT:
+                case WMSZ_BOTTOMRIGHT:
+                {
+                    pRect->bottom = pRect->top + (double)(pRect->right - pRect->left) / dAspectRatio;
+                    break;
+                }
+                case WMSZ_TOPLEFT:
+                case WMSZ_TOPRIGHT:
+                {
+                    pRect->top = pRect->bottom - (double)(pRect->right - pRect->left) / dAspectRatio;
+                    break;
+                }
+                default:
+                    break;
+            }
+        }
+    }
+    /* Pass event to base-class: */
+    return QMainWindow::winEvent(pMessage, pResult);
+}
+#endif /* Q_WS_WIN */
 
 #ifdef Q_WS_X11
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.h	(revision 35246)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.h	(revision 35247)
@@ -55,4 +55,7 @@
     /* Event handlers: */
     bool event(QEvent *pEvent);
+#ifdef Q_WS_WIN
+    bool winEvent(MSG *pMessage, long *pResult); 
+#endif
 #ifdef Q_WS_X11
     bool x11Event(XEvent *pEvent);
