Page 1 of 1

Re: How to create resize box on desktop?

Posted: Sun Sep 30, 2012 4:41 pm
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.

Re: How to create resize box on desktop?

Posted: Sun Sep 30, 2012 7:00 pm
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