Graphics window fix

BlitzPlus Forums/BlitzPlus Programming/Graphics window fix

If you've ever wanted to have a Graphics window with a working minimize and close button, heres the fix:

Download bwin.dll

Userlib:
; bwin DLL by Eikon
.lib "bwin.dll"
win_Close%(hWnd%)

.lib "user32.dll"
GetActiveWindow%()
SetWindowLong%(hWnd%,Val%,Long%):"SetWindowLongA"
GetWindowLong%(hWnd%,Val%):"GetWindowLongA"
SetWindowPos%(hWnd%,hAfter%,x%,y%,cx%,cy%,flags%)

B+ Code:
AppTitle "Proper Graphics window by Eikon"
Graphics 640, 480, 16, 2
SetBuffer BackBuffer()

Const GWL_STYLE        = -16
Const WS_MINIMIZE      = $00020000
Const WS_SYSMENU       = $00080000
Const SWP_NOSIZE       = $0001
Const SWP_NOMOVE       = $0002
Const SWP_FRAMECHANGED = $0020

hWnd = GetActiveWindow()              
Style = GetWindowLong(hWnd, GWL_STYLE) 
SetWindowLong hWnd, GWL_STYLE, Style Or WS_MINIMIZE Or WS_SYSMENU
SetWindowPos hWnd, 0, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE Or SWP_FRAMECHANGED

c_Time = MilliSecs()
Repeat

If MilliSecs() >= c_Time + 100 Then ; Poll the close
	If win_Close(hWnd) Then End
	c_Time = MilliSecs() 
EndIf

Until KeyDown(1)
End

Normally Graphics windows in B+ have no titlebar buttons at all.

Eikon, this would be a life saver. Thanks a million.

aaaaaaaah, very nice. thanks Eikon.

Great stuff!

Already said that at bc.com, but one can't say it often enough! :)

Thanks for the support guys, good to know others can use this.

@Grisu: I did some win_Close testing and its accurate on 98/2k and even XP's luna theme. I think a small warning of "Avoid bulky themes in win mode" would suffice. Too bad I can't get an event for the button or it would be much easier. I'll be sharing CardWar impressions and sending you M+ in an email soon.

Eikon, I had an idea with the maximise button, can you make a detection for this as well in your dll?
It must not be "working" (=streching screen), I only would need a detection flag.

So I could bind it to "Switch to fullscreen" in CW. That would be some good usage I guess.

Just for future reference, try to remember to use 'doesn't have to be' instead of 'must not be'... must not tends to mean something else in English. =]

Thank you for pointing out Hotcakes.
Will do better in the future! ;)

Let's hope Eikon always understands me the right way... :)

This Is Way Awsome!! I Know it is late reply.
Thanks A Million Eikon

The example above fails for me with "User lib function not found", presumably because the proper dll names have been left off the declarations for GetActiveWindow and SetWindowPos (unless I am being dumb), they should be:

GetActiveWindow%():"GetActiveWindow"
SetWindowLong%(hWnd%,Val%,Long%):"SetWindowLongA"
GetWindowLong%(hWnd%,Val%):"GetWindowLongA"
SetWindowPos%(hWnd%,hAfter%,x%,y%,cx%,cy%,flags%):"SetWindowPos"


When fixed it does work very well! Thanks loads.

[Edit] Hmm the close detection only works for the X button, it doesn't work for Alt+F4 or if the user clicks the system menu and selects close. Any ideas?

[Edit2] Also it is a shame to have to include another .dll just to detect if the X is clicked. Surely there is another way to do this with user32 or kernal32 etc?