| | |
| | | return false; |
| | | } |
| | | |
| | | if (systemMenuHandler(hWnd, message, wParam, lParam, result)) { |
| | | return true; |
| | | } |
| | | |
| | | // Test snap layout |
| | | if (snapLayoutHandler(hWnd, message, wParam, lParam, result)) { |
| | | return true; |
| | |
| | | |
| | | // Main implementation |
| | | if (customWindowHandler(hWnd, message, wParam, lParam, result)) { |
| | | return true; |
| | | } |
| | | |
| | | if (systemMenuHandler(hWnd, message, wParam, lParam, result)) { |
| | | return true; |
| | | } |
| | | |
| | |
| | | // this is also the normal behavior of a native Win32 window (but only when the |
| | | // window is not maximized/fullscreen/minimized, of course). |
| | | if (isWindowNoState(hWnd)) { |
| | | static constexpr const int kBorderSize = 2; |
| | | static constexpr const auto kBorderSize = quint8{2}; |
| | | bool isTop = (nativeLocalPos.y <= kBorderSize); |
| | | bool isLeft = nativeLocalPos.x <= kBorderSize; |
| | | bool isRight = (nativeLocalPos.x >= (clientWidth - kBorderSize)); |
| | | if (isTop || isRight) { |
| | | if (isTop || isLeft || isRight) { |
| | | if (dontOverrideCursor) { |
| | | // The user doesn't want the window to be resized, so we tell |
| | | // Windows we are in the client area so that the controls beneath |
| | | // the mouse cursor can still be hovered or clicked. |
| | | *result = (isTitleBar ? HTCAPTION : HTCLIENT); |
| | | } else { |
| | | if (isTop && isRight) { |
| | | if (isTop) { |
| | | if (isLeft) { |
| | | *result = HTTOPLEFT; |
| | | } else if (isRight) { |
| | | *result = HTTOPRIGHT; |
| | | } else if (isTop) { |
| | | } else { |
| | | *result = HTTOP; |
| | | } |
| | | } else { |
| | | if (isLeft) { |
| | | *result = HTLEFT; |
| | | } else { |
| | | *result = HTRIGHT; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (*result == HTNOWHERE) { |
| | | // OK, we are now really inside one of the chrome buttons, tell Windows the |
| | | // exact role of our button. The Snap Layout feature introduced in Windows |