QB64 Phoenix Edition
Creating a screen without a title bar and positioning it on monitor - Printable Version

+- QB64 Phoenix Edition (https://qb64phoenix.com/forum)
+-- Forum: Chatting and Socializing (https://qb64phoenix.com/forum/forumdisplay.php?fid=11)
+--- Forum: General Discussion (https://qb64phoenix.com/forum/forumdisplay.php?fid=2)
+--- Thread: Creating a screen without a title bar and positioning it on monitor (/showthread.php?tid=329)



Creating a screen without a title bar and positioning it on monitor - hanness - 05-04-2022

I hope you will excuse me, I'm trying to figure out as much of this on my own as I can, but I'll likely still have several questions on this topic.

Let's say that I have a screen with a resolution of 2560 x 1440.
I want to create a screen that occupies the entire screen, preferably without a title bar.

I know that I could these commands:

handle& = _NewImage(2560, 1440, 256)
Screen handle&

This will create a 2560 x 1440 screen, but is it possible to somehow remove the title bar and to force this screen to be opened with the upper left corner located at the upper left of the actual screen?


RE: Creating a screen without a title bar and positioning it on monitor - Pete - 05-04-2022

Here's a start. Window without border example:

Code: (Select All)
DECLARE DYNAMIC LIBRARY "User32"
    FUNCTION GetWindowLongA& (BYVAL hwnd AS LONG, BYVAL nIndex AS LONG)
    FUNCTION SetWindowLongA& (BYVAL hwnd AS LONG, BYVAL nIndex AS LONG, BYVAL dwNewLong AS LONG)
    FUNCTION SetWindowPos& (BYVAL hwnd AS LONG, BYVAL hWndInsertAfter AS LONG, BYVAL x AS LONG, BYVAL y AS LONG, BYVAL cx AS LONG, BYVAL cy AS LONG, BYVAL wFlags AS LONG)
END DECLARE
SCREEN _NEWIMAGE(600, 480, 32)
_DELAY .2

GWL_STYLE = -16
ws_border = &H800000
WS_VISIBLE = &H10000000

''WS_VSCROLL = &H200000

_TITLE "No Border"
hwnd& = _WINDOWHANDLE

winstyle2& = GetWindowLongA&(hwnd&, GWL_STYLE)
winstyle& = -12582913
a& = SetWindowLongA&(hwnd&, GWL_STYLE, winstyle& AND WS_VISIBLE) ' AND NOT WS_VSCROLL) ' AND NOT ws_border)
a& = SetWindowPos&(hwnd&, 0, 0, 0, 0, 0, 39)

PRINT "Press any key to get back border...";: SLEEP

'''winstyle& = GetWindowLongA&(hwnd&, GWL_STYLE)
a& = SetWindowLongA&(hwnd&, GWL_STYLE, winstyle2& OR ws_border)
a& = SetWindowPos&(hwnd&, 0, 0, 0, 0, 0, 39)

Pete


RE: Creating a screen without a title bar and positioning it on monitor - OldMoses - 05-04-2022

Something like the following? Of course there is no task bar visible either.

handle& = _NEWIMAGE(_DESKTOPWIDTH, _DESKTOPHEIGHT, 256)
SCREEN handle&
_FULLSCREEN


RE: Creating a screen without a title bar and positioning it on monitor - Pete - 05-04-2022

Another example:

Code: (Select All)
CONST HWND_TOPMOST%& = -1
CONST SWP_NOSIZE%& = &H1
CONST SWP_NOMOVE%& = &H2
CONST SWP_SHOWWINDOW%& = &H40

DECLARE DYNAMIC LIBRARY "User32"
    FUNCTION GetWindowLongA& (BYVAL hwnd AS LONG, BYVAL nIndex AS LONG)
    FUNCTION SetWindowPos& (BYVAL hWnd AS LONG, BYVAL hWndInsertAfter AS _OFFSET, BYVAL X AS INTEGER, BYVAL Y AS INTEGER, BYVAL cx AS INTEGER, BYVAL cy AS INTEGER, BYVAL uFlags AS _OFFSET)
    FUNCTION SetWindowLongA& (BYVAL hwnd AS LONG, BYVAL nIndex AS LONG, BYVAL dwNewLong AS LONG)
    FUNCTION GetForegroundWindow&
    FUNCTION SetLayeredWindowAttributes& (BYVAL hwnd AS LONG, BYVAL crKey AS LONG, BYVAL bAlpha AS _UNSIGNED _BYTE, BYVAL dwFlags AS LONG)
END DECLARE


SCREEN _NEWIMAGE(2560, 1440, 32)
$COLOR:32
COLOR CrayolaGold, DarkCyan
_SCREENMOVE 0, 0 ' Move screen to top left corner.
CLS
_DELAY .1

GWL_STYLE = -16
ws_border = &H800000
WS_VISIBLE = &H10000000
_TITLE "Borderless Window"
DIM hwnd AS LONG
hwnd = _WINDOWHANDLE
_DELAY .1
Level = 175

winstyle2& = GetWindowLongA&(hwnd, GWL_STYLE)
winstyle& = -12582913
a& = SetWindowLongA&(hwnd, GWL_STYLE, winstyle& AND WS_VISIBLE) ' AND NOT WS_VSCROLL) ' AND NOT ws_border)
a& = SetWindowPos&(hwnd, 0, 0, 0, 0, 0, 39)
msg$ = "Welcome to Translucent Windows Without Borders!"
i = 16
COLOR &HFFFFFFFF, &H0 ' white foreground, transparent background
DO
    _LIMIT 60
    FGwin& = GetForegroundWindow&
    IF hwnd <> FGwin& THEN ' QB64 no longer in focus.
        WHILE _MOUSEINPUT: WEND
        a& = SetWindowPos&(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE + SWP_SHOWWINDOW)
        DO: _LIMIT 30: LOOP UNTIL hwnd = GetForegroundWindow&
    END IF
    IF INKEY$ = CHR$(27) THEN EXIT DO
LOOP
SYSTEM



RE: Creating a screen without a title bar and positioning it on monitor - Pete - 05-04-2022

Oh, and similar to what OldMoses posted... Let's play hide the task bar!

_screenmove 0, -27

--------------------------

Just shoves the window up far enough to hide the task bar.

Pete


RE: Creating a screen without a title bar and positioning it on monitor - hanness - 05-04-2022

Thanks guys, that helps immensely.