you have done this before only difference is using right click just need to add case statement in
#sub DialogDragSubclassProc since button control is subclassed
Function DialogButtonDrag
#sub DialogDragSubclassProc since button control is subclassed
Function DialogButtonDrag
str dd=
;BEGIN DIALOG
;0 "" 0x90000A40 0x0 0 0 398 210 "Dialog"
;3 Button 0x54032000 0x0 368 0 30 14 "Close" "left click to close or left click+drag to move or right click to maximize/restore"
;END DIALOG
;DIALOG EDITOR: "" 0x2040700 "*" "" "" ""
if(!ShowDialog(dd &sub.DlgProc 0)) ret
#sub DlgProc
function# hDlg message wParam lParam
int- Fullscreen dialoghandle
sel message
,case WM_INITDIALOG
,Fullscreen =0
,dialoghandle=hDlg
,sub.DialogDragSubclassControl id(3 hDlg) ;;subclass button 3
,case WM_DESTROY
,case WM_COMMAND goto messages2
ret
;messages2
sel wParam
,case IDOK
,case IDCANCEL
,case 3 ;;Close
,DT_Ok hDlg
ret 1
#sub DialogDragSubclassControl
function hwndctrl [modifiers] ;;modifiers: 1 Shift, 2 Ctrl, 4 Alt, 8 Win
;Use this function to subclass a control to enable dialog moving. Call it eg under WM_INITDIALOG.
SetProp hwndctrl "qm_wndproc" SubclassWindow(hwndctrl &sub.DialogDragSubclassProc)
SetProp hwndctrl "qm_modifiers" modifiers
#sub DragDialog
function# hDlg message [modifiers] ;;modifiers: 1 Shift, 2 Ctrl, 4 Alt, 8 Win
POINT-- pp_drag
POINT p
RECT r
int-- t_indrag
sel message
,case WM_LBUTTONDOWN
,t_indrag=0
,if(GetMod!=modifiers) ret
,if(GetWinStyle(hDlg)&WS_CHILD) ;;need to detect drag, or the control will not respond to clicks
,,xm p
,,if(!DragDetect(hDlg p))
,,,ScreenToClient hDlg &p
,,,PostMessage hDlg WM_LBUTTONUP 0 p.y<<16|p.x
,,,ret
,xm pp_drag
,SetCapture hDlg
,t_indrag=1
,
,case [WM_LBUTTONUP,WM_CANCELMODE]
,if(!t_indrag or GetCapture!=hDlg) ret
,ReleaseCapture
,t_indrag=0
,case WM_MOUSEMOVE
,if(!t_indrag or GetCapture!=hDlg) ret
,hDlg=GetAncestor(hDlg 2) ;;in case hDlg is a subclassed control
,GetWindowRect hDlg &r
,xm p
,mov r.left+p.x-pp_drag.x r.top+p.y-pp_drag.y hDlg
,pp_drag=p
ret 1
#sub DialogDragSubclassProc
function# hWnd message wParam lParam
;Used internally in case a control is subclassed. Don't call explicitly.
sel message
,case [WM_RBUTTONDOWN,WM_RBUTTONUP]
,int- Fullscreen dialoghandle
,if Fullscreen =0
,,max dialoghandle
,,Fullscreen=1
,else
,,res dialoghandle
,,Fullscreen=0
,case [WM_LBUTTONDOWN,WM_LBUTTONUP,WM_MOUSEMOVE,WM_CANCELMODE]
,if(sub.DragDialog(hWnd message GetProp(hWnd "qm_modifiers"))) ret
int wndproc=GetProp(hWnd "qm_wndproc"); if(!wndproc) ret
int r=CallWindowProc(wndproc hWnd message wParam lParam)
if(message=WM_NCDESTROY)
,RemoveProp(hWnd "qm_wndproc")
,RemoveProp(hWnd "qm_modifiers")
ret r