[PATCH 6/8] win32u: Move WM_NCLBUTTONDOWN implementation from user32.

Jacek Caban wine at gitlab.winehq.org
Wed Jun 15 06:44:37 CDT 2022


From: Jacek Caban <jacek at codeweavers.com>

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
---
 dlls/user32/controls.h     |   1 -
 dlls/user32/defwnd.c       |   3 -
 dlls/user32/focus.c        |  11 --
 dlls/user32/nonclient.c    | 331 -------------------------------------
 dlls/user32/user_private.h |   1 -
 dlls/win32u/defwnd.c       | 176 +++++++++++++++++++-
 6 files changed, 175 insertions(+), 348 deletions(-)

diff --git a/dlls/user32/controls.h b/dlls/user32/controls.h
index c09ab1233d0..eec6a4babe2 100644
--- a/dlls/user32/controls.h
+++ b/dlls/user32/controls.h
@@ -121,7 +121,6 @@ extern HMENU MENU_GetSysMenu( HWND hWnd, HMENU hPopupMenu ) DECLSPEC_HIDDEN;
 
 /* nonclient area */
 extern LRESULT NC_HandleNCHitTest( HWND hwnd, POINT pt ) DECLSPEC_HIDDEN;
-extern LRESULT NC_HandleNCLButtonDown( HWND hwnd, WPARAM wParam, LPARAM lParam ) DECLSPEC_HIDDEN;
 extern LRESULT NC_HandleNCMouseMove( HWND hwnd, WPARAM wParam, LPARAM lParam ) DECLSPEC_HIDDEN;
 extern LRESULT NC_HandleNCMouseLeave( HWND hwnd ) DECLSPEC_HIDDEN;
 extern LRESULT NC_HandleNCRButtonDown( HWND hwnd, WPARAM wParam, LPARAM lParam ) DECLSPEC_HIDDEN;
diff --git a/dlls/user32/defwnd.c b/dlls/user32/defwnd.c
index 8f32594fd34..0c783666b7e 100644
--- a/dlls/user32/defwnd.c
+++ b/dlls/user32/defwnd.c
@@ -175,9 +175,6 @@ static LRESULT DEFWND_DefWinProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPa
         iF10Key = iMenuSysKey = 0;
         break;
 
-    case WM_NCLBUTTONDOWN:
-        return NC_HandleNCLButtonDown( hwnd, wParam, lParam );
-
     case WM_LBUTTONDBLCLK:
         return NC_HandleNCLButtonDblClk( hwnd, HTCLIENT, lParam );
 
diff --git a/dlls/user32/focus.c b/dlls/user32/focus.c
index c494adce5a6..7e1536ab802 100644
--- a/dlls/user32/focus.c
+++ b/dlls/user32/focus.c
@@ -32,17 +32,6 @@
 #include "wine/server.h"
 
 
-/*******************************************************************
- *		FOCUS_MouseActivate
- *
- * Activate a window as a result of a mouse click
- */
-BOOL FOCUS_MouseActivate( HWND hwnd )
-{
-    return NtUserSetForegroundWindow( hwnd, TRUE );
-}
-
-
 /*******************************************************************
  *		SetForegroundWindow  (USER32.@)
  */
diff --git a/dlls/user32/nonclient.c b/dlls/user32/nonclient.c
index 96518ed4648..128f633fa33 100644
--- a/dlls/user32/nonclient.c
+++ b/dlls/user32/nonclient.c
@@ -624,111 +624,6 @@ BOOL NC_DrawSysButton (HWND hwnd, HDC hdc, BOOL down)
 }
 
 
-/******************************************************************************
- *
- *   NC_DrawCloseButton
- *
- *   Draws the close button.
- *
- *   If bGrayed is true, then draw a disabled Close button
- *
- *****************************************************************************/
-
-static void NC_DrawCloseButton (HWND hwnd, HDC hdc, BOOL down, BOOL bGrayed)
-{
-    RECT rect;
-    DWORD style = GetWindowLongW( hwnd, GWL_STYLE );
-    DWORD ex_style = GetWindowLongW( hwnd, GWL_EXSTYLE );
-
-    NC_GetInsideRect( hwnd, COORDS_WINDOW, &rect, style, ex_style );
-
-    /* A tool window has a smaller Close button */
-    if (ex_style & WS_EX_TOOLWINDOW)
-    {
-        INT iBmpHeight = 11; /* Windows does not use SM_CXSMSIZE and SM_CYSMSIZE   */
-        INT iBmpWidth = 11;  /* it uses 11x11 for  the close button in tool window */
-        INT iCaptionHeight = GetSystemMetrics(SM_CYSMCAPTION);
-
-        rect.top = rect.top + (iCaptionHeight - 1 - iBmpHeight) / 2;
-        rect.left = rect.right - (iCaptionHeight + 1 + iBmpWidth) / 2;
-        rect.bottom = rect.top + iBmpHeight;
-        rect.right = rect.left + iBmpWidth;
-    }
-    else
-    {
-        rect.left = rect.right - GetSystemMetrics(SM_CXSIZE);
-        rect.bottom = rect.top + GetSystemMetrics(SM_CYSIZE) - 2;
-        rect.top += 2;
-        rect.right -= 2;
-    }
-    DrawFrameControl( hdc, &rect, DFC_CAPTION,
-                      (DFCS_CAPTIONCLOSE |
-                       (down ? DFCS_PUSHED : 0) |
-                       (bGrayed ? DFCS_INACTIVE : 0)) );
-}
-
-/******************************************************************************
- *   NC_DrawMaxButton
- *
- *   Draws the maximize button for windows.
- *   If bGrayed is true, then draw a disabled Maximize button
- */
-static void NC_DrawMaxButton(HWND hwnd,HDC hdc,BOOL down, BOOL bGrayed)
-{
-    RECT rect;
-    UINT flags;
-    DWORD style = GetWindowLongW( hwnd, GWL_STYLE );
-    DWORD ex_style = GetWindowLongW( hwnd, GWL_EXSTYLE );
-
-    /* never draw maximize box when window has WS_EX_TOOLWINDOW style */
-    if (ex_style & WS_EX_TOOLWINDOW) return;
-
-    flags = (style & WS_MAXIMIZE) ? DFCS_CAPTIONRESTORE : DFCS_CAPTIONMAX;
-
-    NC_GetInsideRect( hwnd, COORDS_WINDOW, &rect, style, ex_style );
-    if (style & WS_SYSMENU)
-        rect.right -= GetSystemMetrics(SM_CXSIZE);
-    rect.left = rect.right - GetSystemMetrics(SM_CXSIZE);
-    rect.bottom = rect.top + GetSystemMetrics(SM_CYSIZE) - 2;
-    rect.top += 2;
-    rect.right -= 2;
-    if (down) flags |= DFCS_PUSHED;
-    if (bGrayed) flags |= DFCS_INACTIVE;
-    DrawFrameControl( hdc, &rect, DFC_CAPTION, flags );
-}
-
-/******************************************************************************
- *   NC_DrawMinButton
- *
- *   Draws the minimize button for windows.
- *   If bGrayed is true, then draw a disabled Minimize button
- */
-static void  NC_DrawMinButton(HWND hwnd,HDC hdc,BOOL down, BOOL bGrayed)
-{
-    RECT rect;
-    UINT flags;
-    DWORD style = GetWindowLongW( hwnd, GWL_STYLE );
-    DWORD ex_style = GetWindowLongW( hwnd, GWL_EXSTYLE );
-
-    /* never draw minimize box when window has WS_EX_TOOLWINDOW style */
-    if (ex_style & WS_EX_TOOLWINDOW) return;
-
-    flags = (style & WS_MINIMIZE) ? DFCS_CAPTIONRESTORE : DFCS_CAPTIONMIN;
-
-    NC_GetInsideRect( hwnd, COORDS_WINDOW, &rect, style, ex_style );
-    if (style & WS_SYSMENU)
-        rect.right -= GetSystemMetrics(SM_CXSIZE);
-    if (style & (WS_MAXIMIZEBOX|WS_MINIMIZEBOX))
-        rect.right -= GetSystemMetrics(SM_CXSIZE) - 2;
-    rect.left = rect.right - GetSystemMetrics(SM_CXSIZE);
-    rect.bottom = rect.top + GetSystemMetrics(SM_CYSIZE) - 2;
-    rect.top += 2;
-    rect.right -= 2;
-    if (down) flags |= DFCS_PUSHED;
-    if (bGrayed) flags |= DFCS_INACTIVE;
-    DrawFrameControl( hdc, &rect, DFC_CAPTION, flags );
-}
-
 /***********************************************************************
  *           NC_HandleSetCursor
  *
@@ -798,147 +693,6 @@ void NC_GetSysPopupPos( HWND hwnd, RECT* rect )
     }
 }
 
-/***********************************************************************
- *           NC_TrackMinMaxBox
- *
- * Track a mouse button press on the minimize or maximize box.
- *
- * The big difference between 3.1 and 95 is the disabled button state.
- * In win95 the system button can be disabled, so it can ignore the mouse
- * event.
- *
- */
-static void NC_TrackMinMaxBox( HWND hwnd, WORD wParam )
-{
-    MSG msg;
-    HDC hdc = GetWindowDC( hwnd );
-    BOOL pressed = TRUE;
-    UINT state;
-    DWORD wndStyle = GetWindowLongW( hwnd, GWL_STYLE);
-    HMENU hSysMenu = NtUserGetSystemMenu(hwnd, FALSE);
-
-    void  (*paintButton)(HWND, HDC, BOOL, BOOL);
-
-    if (wParam == HTMINBUTTON)
-    {
-        /* If the style is not present, do nothing */
-        if (!(wndStyle & WS_MINIMIZEBOX))
-            return;
-
-        /* Check if the sysmenu item for minimize is there  */
-        state = GetMenuState(hSysMenu, SC_MINIMIZE, MF_BYCOMMAND);
-
-        paintButton = NC_DrawMinButton;
-    }
-    else
-    {
-        /* If the style is not present, do nothing */
-        if (!(wndStyle & WS_MAXIMIZEBOX))
-            return;
-
-        /* Check if the sysmenu item for maximize is there  */
-        state = GetMenuState(hSysMenu, SC_MAXIMIZE, MF_BYCOMMAND);
-
-        paintButton = NC_DrawMaxButton;
-    }
-
-    NtUserSetCapture( hwnd );
-
-    (*paintButton)( hwnd, hdc, TRUE, FALSE);
-
-    while(1)
-    {
-        BOOL oldstate = pressed;
-
-        if (!GetMessageW( &msg, 0, WM_MOUSEFIRST, WM_MOUSELAST )) break;
-        if (NtUserCallMsgFilter( &msg, MSGF_MAX )) continue;
-
-        if(msg.message == WM_LBUTTONUP)
-            break;
-
-        if(msg.message != WM_MOUSEMOVE)
-            continue;
-
-        pressed = (NC_HandleNCHitTest( hwnd, msg.pt ) == wParam);
-        if (pressed != oldstate)
-           (*paintButton)( hwnd, hdc, pressed, FALSE);
-    }
-
-    if(pressed)
-        (*paintButton)(hwnd, hdc, FALSE, FALSE);
-
-    ReleaseCapture();
-    NtUserReleaseDC( hwnd, hdc );
-
-    /* If the minimize or maximize items of the sysmenu are not there */
-    /* or if the style is not present, do nothing */
-    if ((!pressed) || (state == 0xFFFFFFFF))
-        return;
-
-    if (wParam == HTMINBUTTON)
-        SendMessageW( hwnd, WM_SYSCOMMAND,
-                      IsIconic(hwnd) ? SC_RESTORE : SC_MINIMIZE, MAKELONG(msg.pt.x,msg.pt.y) );
-    else
-        SendMessageW( hwnd, WM_SYSCOMMAND,
-                      IsZoomed(hwnd) ? SC_RESTORE:SC_MAXIMIZE, MAKELONG(msg.pt.x,msg.pt.y) );
-}
-
-/***********************************************************************
- * NC_TrackCloseButton
- *
- * Track a mouse button press on the Win95 close button.
- */
-static void NC_TrackCloseButton (HWND hwnd, WPARAM wParam, LPARAM lParam)
-{
-    MSG msg;
-    HDC hdc;
-    BOOL pressed = TRUE;
-    HMENU hSysMenu = NtUserGetSystemMenu(hwnd, FALSE);
-    UINT state;
-
-    if(hSysMenu == 0)
-        return;
-
-    state = GetMenuState(hSysMenu, SC_CLOSE, MF_BYCOMMAND);
-
-    /* If the close item of the sysmenu is disabled or not present do nothing */
-    if((state & MF_DISABLED) || (state & MF_GRAYED) || (state == 0xFFFFFFFF))
-        return;
-
-    hdc = GetWindowDC( hwnd );
-
-    NtUserSetCapture( hwnd );
-
-    NC_DrawCloseButton (hwnd, hdc, TRUE, FALSE);
-
-    while(1)
-    {
-        BOOL oldstate = pressed;
-
-        if (!GetMessageW( &msg, 0, WM_MOUSEFIRST, WM_MOUSELAST )) break;
-        if (NtUserCallMsgFilter( &msg, MSGF_MAX )) continue;
-
-        if(msg.message == WM_LBUTTONUP)
-            break;
-
-        if(msg.message != WM_MOUSEMOVE)
-            continue;
-
-        pressed = (NC_HandleNCHitTest( hwnd, msg.pt ) == wParam);
-        if (pressed != oldstate)
-           NC_DrawCloseButton (hwnd, hdc, pressed, FALSE);
-    }
-
-    if(pressed)
-        NC_DrawCloseButton (hwnd, hdc, FALSE, FALSE);
-
-    ReleaseCapture();
-    NtUserReleaseDC( hwnd, hdc );
-    if (!pressed) return;
-
-    SendMessageW( hwnd, WM_SYSCOMMAND, SC_CLOSE, lParam );
-}
-
 
 /***********************************************************************
  *           NC_TrackScrollBar
@@ -963,91 +717,6 @@ static void NC_TrackScrollBar( HWND hwnd, WPARAM wParam, POINT pt )
 }
 
 
-/***********************************************************************
- *           NC_HandleNCLButtonDown
- *
- * Handle a WM_NCLBUTTONDOWN message. Called from DefWindowProc().
- */
-LRESULT NC_HandleNCLButtonDown( HWND hwnd, WPARAM wParam, LPARAM lParam )
-{
-    LONG style = GetWindowLongW( hwnd, GWL_STYLE );
-
-    switch(wParam)  /* Hit test */
-    {
-    case HTCAPTION:
-        {
-            HWND top = hwnd, parent;
-            while(1)
-            {
-                if ((GetWindowLongW( top, GWL_STYLE ) & (WS_POPUP|WS_CHILD)) != WS_CHILD)
-                    break;
-                parent = NtUserGetAncestor( top, GA_PARENT );
-                if (!parent || parent == GetDesktopWindow()) break;
-                top = parent;
-            }
-
-            if (FOCUS_MouseActivate( top ) || (GetActiveWindow() == top))
-                SendMessageW( hwnd, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, lParam );
-            break;
-        }
-
-    case HTSYSMENU:
-        if (style & WS_SYSMENU)
-        {
-            HDC hDC = GetWindowDC( hwnd );
-            NC_DrawSysButton( hwnd, hDC, TRUE );
-            NtUserReleaseDC( hwnd, hDC );
-            SendMessageW( hwnd, WM_SYSCOMMAND, SC_MOUSEMENU + HTSYSMENU, lParam );
-        }
-        break;
-
-    case HTMENU:
-        SendMessageW( hwnd, WM_SYSCOMMAND, SC_MOUSEMENU, lParam );
-        break;
-
-    case HTHSCROLL:
-        SendMessageW( hwnd, WM_SYSCOMMAND, SC_HSCROLL + HTHSCROLL, lParam );
-        break;
-
-    case HTVSCROLL:
-        SendMessageW( hwnd, WM_SYSCOMMAND, SC_VSCROLL + HTVSCROLL, lParam );
-        break;
-
-    case HTMINBUTTON:
-    case HTMAXBUTTON:
-        NC_TrackMinMaxBox( hwnd, wParam );
-        break;
-
-    case HTCLOSE:
-        NC_TrackCloseButton (hwnd, wParam, lParam);
-        break;
-
-    case HTLEFT:
-    case HTRIGHT:
-    case HTTOP:
-    case HTTOPLEFT:
-    case HTTOPRIGHT:
-    case HTBOTTOM:
-    case HTBOTTOMLEFT:
-    case HTBOTTOMRIGHT:
-        /* Old comment:
-         * "make sure hittest fits into 0xf and doesn't overlap with HTSYSMENU"
-         * This was previously done by setting wParam=SC_SIZE + wParam - 2
-         */
-        /* But that is not what WinNT does. Instead it sends this. This
-         * is easy to differentiate from HTSYSMENU, because HTSYSMENU adds
-         * SC_MOUSEMENU into wParam.
-         */
-        SendMessageW( hwnd, WM_SYSCOMMAND, SC_SIZE + wParam - (HTLEFT-WMSZ_LEFT), lParam);
-        break;
-
-    case HTBORDER:
-        break;
-    }
-    return 0;
-}
-
-
 /***********************************************************************
  *           NC_HandleNCRButtonDown
  *
diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h
index aa3e1565bfa..3997e2410f8 100644
--- a/dlls/user32/user_private.h
+++ b/dlls/user32/user_private.h
@@ -86,7 +86,6 @@ extern void free_cached_data( UINT format, HANDLE handle ) DECLSPEC_HIDDEN;
 extern HANDLE render_synthesized_format( UINT format, UINT from ) DECLSPEC_HIDDEN;
 
 extern void CLIPBOARD_ReleaseOwner( HWND hwnd ) DECLSPEC_HIDDEN;
-extern BOOL FOCUS_MouseActivate( HWND hwnd ) DECLSPEC_HIDDEN;
 extern BOOL set_capture_window( HWND hwnd, UINT gui_flags, HWND *prev_ret ) DECLSPEC_HIDDEN;
 extern HDC get_display_dc(void) DECLSPEC_HIDDEN;
 extern void release_display_dc( HDC hdc ) DECLSPEC_HIDDEN;
diff --git a/dlls/win32u/defwnd.c b/dlls/win32u/defwnd.c
index 6ec27fc6725..780570b5ad4 100644
--- a/dlls/win32u/defwnd.c
+++ b/dlls/win32u/defwnd.c
@@ -1790,6 +1790,177 @@ static LRESULT handle_nc_hit_test( HWND hwnd, POINT pt )
     return HTNOWHERE;
 }
 
+static void track_min_max_box( HWND hwnd, WORD wparam )
+{
+    HDC hdc = NtUserGetDCEx( hwnd, 0, DCX_USESTYLE | DCX_WINDOW );
+    DWORD style = get_window_long( hwnd, GWL_STYLE );
+    HMENU sys_menu = NtUserGetSystemMenu(hwnd, FALSE);
+    void (*paint_button)( HWND, HDC, BOOL, BOOL );
+    BOOL pressed = TRUE;
+    UINT state;
+    MSG msg;
+
+    if (wparam == HTMINBUTTON)
+    {
+        /* If the style is not present, do nothing */
+        if (!(style & WS_MINIMIZEBOX)) return;
+
+        /* Check if the sysmenu item for minimize is there  */
+        state = get_menu_state( sys_menu, SC_MINIMIZE, MF_BYCOMMAND );
+        paint_button = draw_min_button;
+    }
+    else
+    {
+        /* If the style is not present, do nothing */
+        if (!(style & WS_MAXIMIZEBOX)) return;
+
+        /* Check if the sysmenu item for maximize is there  */
+        state = get_menu_state( sys_menu, SC_MAXIMIZE, MF_BYCOMMAND );
+        paint_button = draw_max_button;
+    }
+
+    NtUserSetCapture( hwnd );
+    paint_button( hwnd, hdc, TRUE, FALSE);
+
+    for (;;)
+    {
+        BOOL oldstate = pressed;
+
+        if (!NtUserGetMessage( &msg, 0, WM_MOUSEFIRST, WM_MOUSELAST )) break;
+        if (NtUserCallMsgFilter( &msg, MSGF_MAX )) continue;
+        if(msg.message == WM_LBUTTONUP) break;
+        if(msg.message != WM_MOUSEMOVE) continue;
+
+        pressed = handle_nc_hit_test( hwnd, msg.pt ) == wparam;
+        if (pressed != oldstate) paint_button( hwnd, hdc, pressed, FALSE);
+    }
+
+    if (pressed) paint_button( hwnd, hdc, FALSE, FALSE );
+
+    release_capture();
+    NtUserReleaseDC( hwnd, hdc );
+
+    /* If the minimize or maximize items of the sysmenu are not there
+     * or if the style is not present, do nothing */
+    if (!pressed || state == 0xffffffff) return;
+
+    if (wparam == HTMINBUTTON)
+        send_message( hwnd, WM_SYSCOMMAND,
+                      is_iconic( hwnd ) ? SC_RESTORE : SC_MINIMIZE, MAKELONG( msg.pt.x, msg.pt.y ));
+    else
+        send_message( hwnd, WM_SYSCOMMAND,
+                      is_zoomed( hwnd ) ? SC_RESTORE : SC_MAXIMIZE, MAKELONG( msg.pt.x, msg.pt.y ));
+}
+
+static void track_close_button( HWND hwnd, WPARAM wparam, LPARAM lparam )
+{
+    HMENU sys_menu;
+    BOOL pressed = TRUE;
+    UINT state;
+    MSG msg;
+    HDC hdc;
+
+    if (!(sys_menu = NtUserGetSystemMenu( hwnd, FALSE ))) return;
+
+    state = get_menu_state( sys_menu, SC_CLOSE, MF_BYCOMMAND );
+
+    /* If the close item of the sysmenu is disabled or not present do nothing */
+    if((state & MF_DISABLED) || (state & MF_GRAYED) || state == 0xFFFFFFFF) return;
+    hdc = NtUserGetDCEx( hwnd, 0, DCX_USESTYLE | DCX_WINDOW );
+    NtUserSetCapture( hwnd );
+    draw_close_button( hwnd, hdc, TRUE, FALSE );
+
+    for (;;)
+    {
+        BOOL oldstate = pressed;
+
+        if (!NtUserGetMessage( &msg, 0, WM_MOUSEFIRST, WM_MOUSELAST )) break;
+        if (NtUserCallMsgFilter( &msg, MSGF_MAX )) continue;
+        if (msg.message == WM_LBUTTONUP) break;
+        if (msg.message != WM_MOUSEMOVE) continue;
+
+        pressed = handle_nc_hit_test( hwnd, msg.pt ) == wparam;
+        if (pressed != oldstate) draw_close_button( hwnd, hdc, pressed, FALSE );
+    }
+
+    if (pressed) draw_close_button( hwnd, hdc, FALSE, FALSE );
+
+    release_capture();
+    NtUserReleaseDC( hwnd, hdc );
+    if (pressed) send_message( hwnd, WM_SYSCOMMAND, SC_CLOSE, lparam );
+}
+
+static LRESULT handle_nc_lbutton_down( HWND hwnd, WPARAM wparam, LPARAM lparam )
+{
+    LONG style = get_window_long( hwnd, GWL_STYLE );
+
+    switch (wparam)  /* Hit test */
+    {
+    case HTCAPTION:
+        {
+            HWND top = hwnd, parent;
+            for (;;)
+            {
+                if ((get_window_long( top, GWL_STYLE ) & (WS_POPUP | WS_CHILD)) != WS_CHILD)
+                    break;
+                parent = NtUserGetAncestor( top, GA_PARENT );
+                if (!parent || parent == get_desktop_window()) break;
+                top = parent;
+            }
+
+            if (set_foreground_window( top, TRUE ) || (get_active_window() == top))
+                send_message( hwnd, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, lparam );
+            break;
+        }
+
+    case HTSYSMENU:
+        if (style & WS_SYSMENU)
+        {
+            HDC hdc = NtUserGetDCEx( hwnd, 0, DCX_USESTYLE | DCX_WINDOW );
+            draw_nc_sys_button( hwnd, hdc, TRUE );
+            NtUserReleaseDC( hwnd, hdc );
+            send_message( hwnd, WM_SYSCOMMAND, SC_MOUSEMENU + HTSYSMENU, lparam );
+        }
+        break;
+
+    case HTMENU:
+        send_message( hwnd, WM_SYSCOMMAND, SC_MOUSEMENU, lparam );
+        break;
+
+    case HTHSCROLL:
+        send_message( hwnd, WM_SYSCOMMAND, SC_HSCROLL + HTHSCROLL, lparam );
+        break;
+
+    case HTVSCROLL:
+        send_message( hwnd, WM_SYSCOMMAND, SC_VSCROLL + HTVSCROLL, lparam );
+        break;
+
+    case HTMINBUTTON:
+    case HTMAXBUTTON:
+        track_min_max_box( hwnd, wparam );
+        break;
+
+    case HTCLOSE:
+        track_close_button( hwnd, wparam, lparam );
+        break;
+
+    case HTLEFT:
+    case HTRIGHT:
+    case HTTOP:
+    case HTTOPLEFT:
+    case HTTOPRIGHT:
+    case HTBOTTOM:
+    case HTBOTTOMLEFT:
+    case HTBOTTOMRIGHT:
+        send_message( hwnd, WM_SYSCOMMAND, SC_SIZE + wparam - (HTLEFT - WMSZ_LEFT), lparam );
+        break;
+
+    case HTBORDER:
+        break;
+    }
+    return 0;
+}
+
 LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, BOOL ansi )
 {
     LRESULT result = 0;
@@ -1835,6 +2006,9 @@ LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam,
     case WM_NCACTIVATE:
         return handle_nc_activate( hwnd, wparam, lparam );
 
+    case WM_NCLBUTTONDOWN:
+        return handle_nc_lbutton_down( hwnd, wparam, lparam );
+
     case WM_WINDOWPOSCHANGING:
         return handle_window_pos_changing( hwnd, (WINDOWPOS *)lparam );
 
@@ -1886,7 +2060,7 @@ LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam,
             if (result) break;
         }
 
-        /* Caption clicks are handled by NC_HandleNCLButtonDown() */
+        /* Caption clicks are handled by handle_nc_lbutton_down() */
         result = HIWORD(lparam) == WM_LBUTTONDOWN && LOWORD(lparam) == HTCAPTION ?
             MA_NOACTIVATE : MA_ACTIVATE;
         break;
-- 
GitLab


https://gitlab.winehq.org/wine/wine/-/merge_requests/250



More information about the wine-devel mailing list