How to create resize box on desktop?

Just starting out? Need help? Post your questions and find answers here.
User avatar
Danilo
Addict
Addict
Posts: 3036
Joined: Sat Apr 26, 2003 8:26 am
Location: Planet Earth

Re: How to create resize box on desktop?

Post by Danilo »

kernadec wrote:No resize on windows with windows seven : PackardBell DOTS E2 32bits
PB 4.61 & PB 5 b2
Hmm, it does not work on Win7 32bits? Works here on Win7 64bit.

lParam for #WM_NCLBUTTONDOWN should contain the cursor position, maybe that's the reason it didn't work?
Maybe make the #BOXSIZE little bit bigger?

Code: Select all

#BOXSIZE = 8

Procedure WindowCallback(hWnd, msg, wParam, lParam)
    If msg = #WM_SIZE
        ww = lParam & $FFFF
        wh = (lParam >> 16) & $FFFF
        ResizeGadget(0,0,0,#BOXSIZE,#BOXSIZE)
        ResizeGadget(1,ww/2-#BOXSIZE/2,0,#BOXSIZE,#BOXSIZE)
        ResizeGadget(2,ww-#BOXSIZE,0,#BOXSIZE,#BOXSIZE)
        ResizeGadget(3,ww-#BOXSIZE,wh/2-#BOXSIZE/2,#BOXSIZE,#BOXSIZE)
        ResizeGadget(4,ww-#BOXSIZE,wh-#BOXSIZE,#BOXSIZE,#BOXSIZE)
        ResizeGadget(5,ww/2-#BOXSIZE/2,wh-#BOXSIZE,#BOXSIZE,#BOXSIZE)
        ResizeGadget(6,0,wh-#BOXSIZE,#BOXSIZE,#BOXSIZE)
        ResizeGadget(7,0,wh/2-#BOXSIZE/2,#BOXSIZE,#BOXSIZE)
        ;ProcedureReturn 0
    EndIf
    ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

OpenWindow(0,0,0,512,512,"",#PB_Window_ScreenCentered|#PB_Window_BorderLess)
StickyWindow(0,#True)
SetWindowColor(0, RGB(0,100,255)) ; RGB(120,120,120)
SetWindowLongPtr_(WindowID(0), #GWL_EXSTYLE,GetWindowLongPtr_(WindowID(0), #GWL_EXSTYLE)|#WS_EX_LAYERED)
SetLayeredWindowAttributes_(WindowID(0), RGB(100,0,0), 120, #LWA_ALPHA)
CreatePopupMenu(0)
MenuItem(1, "Quit")
MenuItem(2, "Cancel")
SetClassLongPtr_(WindowID(0), #GCL_HCURSOR, LoadCursor_(0, #IDC_SIZEALL))

wh = WindowHeight(0)
ww = WindowWidth(0)

CanvasGadget(0,0,0,#BOXSIZE,#BOXSIZE)
    SetGadgetAttribute(0,#PB_Canvas_Cursor,#PB_Cursor_LeftUpRightDown)
CanvasGadget(1,ww/2-#BOXSIZE/2,0,#BOXSIZE,#BOXSIZE)
    SetGadgetAttribute(1,#PB_Canvas_Cursor,#PB_Cursor_UpDown)
CanvasGadget(2,ww-#BOXSIZE,0,#BOXSIZE,#BOXSIZE)
    SetGadgetAttribute(2,#PB_Canvas_Cursor,#PB_Cursor_LeftDownRightUp)
CanvasGadget(3,ww-#BOXSIZE,wh/2-#BOXSIZE/2,#BOXSIZE,#BOXSIZE)
    SetGadgetAttribute(3,#PB_Canvas_Cursor,#PB_Cursor_LeftRight)
CanvasGadget(4,ww-#BOXSIZE,wh-#BOXSIZE,#BOXSIZE,#BOXSIZE)
    SetGadgetAttribute(4,#PB_Canvas_Cursor,#PB_Cursor_LeftUpRightDown)
CanvasGadget(5,ww/2-#BOXSIZE/2,wh-#BOXSIZE,#BOXSIZE,#BOXSIZE)
    SetGadgetAttribute(5,#PB_Canvas_Cursor,#PB_Cursor_UpDown)
CanvasGadget(6,0,wh-#BOXSIZE,#BOXSIZE,#BOXSIZE)
    SetGadgetAttribute(6,#PB_Canvas_Cursor,#PB_Cursor_LeftDownRightUp)
CanvasGadget(7,0,wh/2-#BOXSIZE/2,#BOXSIZE,#BOXSIZE)
    SetGadgetAttribute(7,#PB_Canvas_Cursor,#PB_Cursor_LeftRight)

SetWindowCallback(@WindowCallback())

Repeat
  EventID = WaitWindowEvent()
  Select EventID
    Case #WM_LBUTTONDOWN
      GetCursorPos_(@pt.POINT)
      cursor = (pt\x << 16) | pt\y
      SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, cursor)
     
    Case #WM_RBUTTONUP
      DisplayPopupMenu(0, WindowID(0))
     
    Case #PB_Event_Menu
      Select EventMenu()
        Case 1
          End
      EndSelect
    Case #PB_Event_Gadget
        If EventGadget() >= 0 And EventGadget() <= 7 And EventType()=#PB_EventType_LeftButtonDown
            GetCursorPos_(@pt.POINT)
            cursor = (pt\x << 16) | pt\y
            Select EventGadget()
                Case 0: SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTTOPLEFT     , cursor)
                Case 1: SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTTOP         , cursor)
                Case 2: SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTTOPRIGHT    , cursor)
                Case 3: SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTRIGHT       , cursor)
                Case 4: SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTBOTTOMRIGHT , cursor)
                Case 5: SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTBOTTOM      , cursor)
                Case 6: SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTBOTTOMLEFT  , cursor)
                Case 7: SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTLEFT        , cursor)
            EndSelect
        EndIf
     
  EndSelect
Until EventID = #PB_Event_CloseWindow
Tested also on WinXP Pro and it works here.
User avatar
kernadec
Enthusiast
Enthusiast
Posts: 146
Joined: Tue Jan 05, 2010 10:35 am

Re: How to create resize box on desktop?

Post by kernadec »

test new code with # BOXSIZE up to 20 without success.
move windows in all codes to mouse and padmouse is ok

redimentionnent does not function with the mouse and padmouse

Danilo thank you for your work
bye
Post Reply