gbClientCapture (Discussion)
#4
I was thinking it would be easier to create a region hole instead to avoid going down a deep rabbit hole to resolve your sizing issue. OK, so here is a snippet I lifted from an old post.  It has one side effect...  

Code:
'
'-snippet taken from Greg Turgeon post 5 Aug 2007 PowerBASIC forum
' https://forum.powerbasic.com/forum/user-to-user-discussions/powerbasic-for-windows/14801-how-to-make-a-hole?p=205890#post205890

#COMPILE EXE
#DIM ALL
#INCLUDE "WIN32API.INC"

#RESOURCE MANIFEST, 1,      "icons\xptheme_dpiaware.xml"

'--------------------------------------------------------------------------------------------------
'
'--------------------------------------------------------------------------------------------------
FUNCTION PBMAIN&()
    LOCAL hDlg, x, y, lwide, lhigh AS LONG
    DIALOG NEW PIXELS, 0,"", , , 496, 160, %WS_SYSMENU OR %WS_MINIMIZEBOX OR %WS_CAPTION OR %WS_THICKFRAME,,  TO hDlg
    DIALOG GET CLIENT hDlg TO x, y
    DIALOG SHOW MODAL hDlg, CALL DlgMain&()
END FUNCTION

'--------------------------------------------------------------------------------------------------
'
'--------------------------------------------------------------------------------------------------
CALLBACK FUNCTION DlgMain&()
    STATIC captionHigh AS LONG
    LOCAL hRgn, lwide, lhigh, clientWide, clientHigh AS LONG
    LOCAL rc AS RECT, p() AS POINTL

    SELECT CASE AS LONG CBMSG

        CASE %WM_INITDIALOG
          captionHigh = GetSystemMetrics(%SM_CYCAPTION)
          SetWindowPos CBHNDL, %HWND_TOPMOST, 0, 0, 0, 0, %SWP_NOSIZE OR %SWP_NOMOVE
          DIALOG GET SIZE CBHNDL TO lwide, lhigh
          DIALOG GET CLIENT CBHNDL TO clientWide, clientHigh
          SetRect rc, 10, (lhigh-clientHigh)+captionHigh*2, lwide-10, lhigh-captionHigh
          hRgn = CreateRectRgn(rc.nLeft, rc.nTop, rc.nRight, rc.nBottom)
          CreateHole CBHNDL, hRgn, %TRUE

        CASE %WM_SIZE
            DIALOG GET SIZE CBHNDL TO lwide, lhigh
            DIALOG GET CLIENT CBHNDL TO clientWide, clientHigh
            SetRect rc, 10, (lhigh-clientHigh)+captionHigh*2, lwide-10, lhigh-captionHigh
            hRgn = CreateRectRgn(rc.nLeft, rc.nTop, rc.nRight, rc.nBottom)
            CreateHole CBHNDL, hRgn, %TRUE


    END SELECT
END FUNCTION

'--------------------------------------------------------------------------------------------------
'
'--------------------------------------------------------------------------------------------------
FUNCTION CreateHole&(BYVAL hWnd AS LONG, BYVAL hRGN AS LONG, BYVAL Action AS LONG)
    LOCAL windowRect AS RECT, hWindowRgn, hHoleRgn, hThisRgn AS LONG
    GetWindowRect hWnd, windowRect
    hWindowRgn = CreateRectRgn(0,0,WindowRect.nRight, WindowRect.nBottom)
    hHoleRgn = CreateRectRgn(0,0,0,0)
    IF Action THEN
       hThisRgn = CreateRectRgn (0,0,0,0)
       CombineRgn hThisRgn, hRGN, 0&, %RGN_COPY
    ELSE
       CombineRgn hThisRgn, hRGN, 0&, %RGN_OR
    END IF
    CombineRgn hHoleRgn, hThisRgn, hWindowRgn, %RGN_XOR
    SetWindowRgn hWnd, hHoleRgn, %TRUE
END FUNCTION

   
Reply


Messages In This Thread
gbClientCapture (Discussion) - by Gary Beene - 20.09.2025, 07:43 PM
RE: gbClientCapture (Discussion) - by Jules Marchildon - 21.09.2025, 03:55 AM
RE: gbClientCapture (Discussion) - by Gary Beene - 21.09.2025, 04:45 AM
RE: gbClientCapture (Discussion) - by Gary Beene - 21.09.2025, 07:44 AM
RE: gbClientCapture (Discussion) - by Gary Beene - 21.09.2025, 09:14 PM
RE: gbClientCapture (Discussion) - by Gary Beene - 22.09.2025, 02:19 AM
RE: gbClientCapture (Discussion) - by Gary Beene - 22.09.2025, 10:52 PM
RE: gbClientCapture (Discussion) - by Gary Beene - 23.09.2025, 02:17 AM
RE: gbClientCapture (Discussion) - by Gary Beene - 23.09.2025, 06:11 AM
RE: gbClientCapture (Discussion) - by Gary Beene - 24.09.2025, 04:35 PM
RE: gbClientCapture (Discussion) - by Gary Beene - 26.09.2025, 04:59 AM
RE: gbClientCapture (Discussion) - by Gary Beene - 28.09.2025, 05:35 AM

Forum Jump:


Users browsing this thread: 1 Guest(s)