DreamDancer

Manual Borderless Window Resizing

Jun 17th, 2016
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ' this is PowerBasic syntax
  2. ' not going to try and weed out the variables that are not in used for this
  3. ' if you want to see the program this is used in in action
  4. ' visit my subsite foxedit.dreammakersguild.com and look in the downloads
  5. ' for Image Quick
  6.  
  7. LOCAL ImageFileName, uFileName  AS STRING
  8. STATIC hSourceImage             AS DWORD
  9. STATIC hIcon                    AS DWORD
  10. LOCAL oldIcon                   AS DWORD
  11. LOCAL hLoadImage                AS DWORD
  12. STATIC FullScreen               AS LONG
  13. STATIC isCaptured               AS LONG
  14. STATIC winSize, capSize         AS RECT
  15. LOCAL clientSize                AS RECT
  16. STATIC mouseCapturedPos         AS POINTS
  17. LOCAL mouseMovePos              AS POINTS
  18. LOCAL mouseMoveDifference       AS POINTS
  19. LOCAL hResult                   AS LONG
  20. LOCAL DeskSize, MySize          AS MYPOINTS
  21. LOCAL Work                      AS STRING
  22. LOCAL hCursor                   AS DWORD
  23. STATIC moveDirection            AS LONG
  24. LOCAL mousePos                  AS POINTAPI
  25. STATIC LastFilePath             AS STRING
  26. LOCAL strCaption                AS ASCIIZ * 80
  27. STATIC pDropTarget              AS IDropTargetImpl
  28.  
  29.     CASE %WM_LBUTTONDOWN
  30.         IF (ISFALSE(FullScreen)) THEN
  31.             SetCapture(hWnd)
  32.             isCaptured = %TRUE
  33.             mouseCapturedPos.x = LO(WORD, lParam)
  34.             mouseCapturedPos.y = HI(WORD, lParam)
  35.             GetWindowRect hWnd, capSize
  36.             mouseMovePos.x = LO(WORD, lParam)
  37.             mouseMovePos.y = HI(WORD, lParam)
  38.             GetClientRect hWnd, clientSize
  39.             moveDirection = GetMovementDirection(clientSize, mouseMovePos, %TRUE)
  40.             hCursor = GetCorrectCursor(moveDirection)
  41.             SetCursor hCursor
  42.             '    Work = "Mouse Start ("& FORMAT$(mouseCapturedPos.x) &","& FORMAT$(mouseCapturedPos.y) &")"
  43.            '    #DEBUG PRINT Work
  44.        END IF
  45.  
  46.  
  47.     CASE %WM_LBUTTONUP
  48.         ReleaseCapture()
  49.         isCaptured = %FALSE
  50.         IF ((moveDirection > 0) AND (moveDirection <> 5)) THEN
  51.             hResult = CheckMenuRadioItem(g_MainMenu, %IDM_SCALE_BEGIN, %IDM_SCALE_END, %IDM_SCALE_CUSTOM, %MF_BYCOMMAND)
  52.         END IF
  53.         moveDirection = 0
  54.         ' InvalidateRect hWnd, BYVAL 0, %TRUE
  55.  
  56.  
  57.     CASE %WM_MOUSEMOVE   ' received on mouse move over the main window
  58.        mouseMovePos.x = LO(WORD, lParam)
  59.         mouseMovePos.y = HI(WORD, lParam)
  60.         IF (ISTRUE(isCaptured)) THEN
  61.             hCursor = GetCorrectCursor(moveDirection)
  62.             SetCursor hCursor
  63.             mouseMovePos.x = LO(WORD, lParam)
  64.             mouseMovePos.y = HI(WORD, lParam)
  65.             GetWindowRect hWnd, winSize
  66.             '    Work = "Mouse Move From ("& FORMAT$(mouseCapturedPos.x) &","& FORMAT$(mouseCapturedPos.y) &")" _
  67.             '        &" To ("& FORMAT$(mouseMovePos.x) &","& FORMAT$(mouseMovePos.y) &")" _
  68.             '        &" Difference ("& FORMAT$(mouseMoveDifference.x) &","& FORMAT$(mouseMoveDifference.y) &")"
  69.            '    #DEBUG PRINT Work
  70.            mouseMoveDifference.x = mouseMovePos.x - mouseCapturedPos.x
  71.             mouseMoveDifference.y = mouseMovePos.y - mouseCapturedPos.y
  72.             mySize.iWidth  = winSize.nRight - winSize.nLeft
  73.             mySize.iHeight = winSize.nBottom - winSize.nTop
  74.             SELECT CASE moveDirection
  75.                 CASE 0 ' this should not happen
  76.                    BEEP
  77.                 CASE 1 ' moving lower left corner
  78.                    winSize.nLeft = winSize.nLeft + mouseMoveDifference.x
  79.                     mySize.iWidth  = winSize.nRight - winSize.nLeft
  80.                     mySize.iHeight = mySize.iHeight + mouseMoveDifference.y
  81.                     mouseCapturedPos.y = mouseMovePos.y
  82.                 CASE 2 ' moving bottom edge
  83.                    mySize.iHeight = mySize.iHeight + mouseMoveDifference.y
  84.                     mouseCapturedPos.x = mouseMovePos.x
  85.                     mouseCapturedPos.y = mouseMovePos.y
  86.                 CASE 3 ' moving lower right corner
  87.                    mySize.iWidth = mySize.iWidth + mouseMoveDifference.x
  88.                     mySize.iHeight = mySize.iHeight + mouseMoveDifference.y
  89.                     mouseCapturedPos.x = mouseMovePos.x
  90.                     mouseCapturedPos.y = mouseMovePos.y
  91.                 CASE 4 ' moving left edge
  92.                    winSize.nLeft = winSize.nLeft + mouseMoveDifference.x
  93.                     mySize.iWidth  = winSize.nRight - winSize.nLeft
  94.                 CASE 5 ' moving position
  95.                    winSize.nLeft = winSize.nLeft + mouseMoveDifference.x
  96.                     winSize.nTop  = winSize.nTop  + mouseMoveDifference.y
  97.                 CASE 6 ' moving right edge
  98.                    mySize.iWidth = mySize.iWidth + mouseMoveDifference.x
  99.                     mouseCapturedPos.x = mouseMovePos.x
  100.                     mouseCapturedPos.y = mouseMovePos.y
  101.                 CASE 7 ' moving upper left corner
  102.                    winSize.nTop = winSize.nTop + mouseMoveDifference.y
  103.                     mySize.iHeight = winSize.nBottom - winSize.nTop
  104.                     winSize.nLeft = winSize.nLeft + mouseMoveDifference.x
  105.                     mySize.iWidth  = winSize.nRight - winSize.nLeft
  106.                 CASE 8 ' moving top
  107.                    winSize.nTop = winSize.nTop + mouseMoveDifference.y
  108.                     mySize.iHeight = winSize.nBottom - winSize.nTop
  109.                 CASE 9 ' moving upper right corner
  110.                    winSize.nTop = winSize.nTop + mouseMoveDifference.y
  111.                     mySize.iHeight = winSize.nBottom - winSize.nTop
  112.                     mySize.iWidth = mySize.iWidth + mouseMoveDifference.x
  113.                     mouseCapturedPos.x = mouseMovePos.x
  114.             END SELECT
  115.             IF (MySize.iWidth < 32) THEN
  116.                 MySize.iWidth = 32
  117.             END IF
  118.             IF (mySize.iHeight < 32) THEN
  119.                 mySize.iHeight = 32
  120.             END IF
  121.             MoveWindow hWnd, winSize.nLeft, winSize.nTop, MySize.iWidth, mySize.iHeight, %TRUE
  122.             ' InvalidateRect hWnd, byval 0, %TRUE
  123.        ELSEIF (ISFALSE(FullScreen)) THEN
  124.             GetClientRect hWnd, clientSize
  125.             moveDirection = GetMovementDirection(clientSize, mouseMovePos, %FALSE)
  126.             hCursor = GetCorrectCursor(moveDirection)
  127.             SetCursor hCursor
  128.         ELSE
  129.             hCursor = LoadCursor(%NULL, BYVAL %IDC_ARROW)
  130.             SetCursor hCursor
  131.         END IF
Advertisement
Add Comment
Please, Sign In to add comment