Win32 Native GUI but...

BlitzMax Forums/BlitzMax Programming/Win32 Native GUI but...

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

For those with no controls, does this fix it?

Strict
Import "-luser32"
'Import "-lkernel32"
Extern 
	Function GetSysColorBrush:Int(nIndex:Int) = "GetSysColorBrush@4"
	Function SendMessage:Int(hWnd:Int,MSG:Int,wParam:Int,lParam:Int) = "SendMessageA@16"
	Function CreateFontA:Int(nHeight,nWidth,nEscapement,nOrientation ,fnWeight, fdwItalic,dwUnderline , fdwStrikeOut,fdwCharSet, fdwOutputPrecision , fdwClipPrecision,fdwQuality, fdwPitchAndFamily, lpszFace:Byte Ptr) = "CreateFontA@56"
	Function GetLastError:Int() = "GetLastError@0"
	Function GetWindowDC:Int(hWnd) = "GetWindowDC@4"
	Function SelectObject:Int(hWnd,obj) = "SelectObject@8"
	Function FindWindow(lpClassName:Byte Ptr, lpWindowName:Byte Ptr) = "FindWindowA@8"
	
	
	Function GetWindowLong :Int(hWnd ,nIndex)= "GetWindowLongA@8"
	Function GetActiveWindow :Int()= "GetActiveWindow@0"
	
	Function SetWindowLong :Int(hWnd ,nIndex,lNewLong )= "SetWindowLongA@12"
	
	Function SetWindowLongPtr :Int(hWnd ,nIndex,lNewLong:Byte Ptr )= "SetWindowLongA@12"
	
	
	Function CallWindowProc:Int(lpPrevWndFunc,hWnd,uMsg,wParam,lParam) = "CallWindowProcA@20"

	Function GetSysColor:Int(index) = "GetSysColor@4"

	
End Extern

Const BN_CLICKED = 0
Const EN_CHANGE    = $300
Const ES_NUMBER      = $2000
Const COLOR_BTNFACE = 15

Const WS_CAPTION = $C00000
Const WS_SYSMENU = $80000
Const WS_VISIBLE = $10000000
Const WS_MINIMIZEBOX = $20000
Const WS_MAXIMIZEBOX = $10000

Const WS_CHILD           = $40000000



'Const WM_DESTROY = 2
'Const WM_GETTEXT = $D
'Const WM_SETFONT = $30
'Const WM_KEYDOWN = $100
'Const WM_COMMAND = $111



Global gApptitle$ = "My window"
AppTitle = gApptitle 
Graphics 600,400,0,0

AppTitle = gApptitle 

'Global window = FindWindow("BBDX7Device Window Class",gApptitle )
'DebugLog "window "+ window 

Global window =GetActiveWindow ()
DebugLog "window "+ window 


If Not window RuntimeError "Can't get window handle"



Const GWL_STYLE      = -16
Const WS_CLIPCHILDREN    = $2000000
Local   winstyle = GetWindowLong(window , GWL_STYLE)

SetWindowLong(window , GWL_STYLE, WS_CLIPCHILDREN  | winstyle ) 'change the style so that controls are not overdrawn


Global  lpParamADDR:Byte Ptr
'Local window = CreateWindowExA( 0,Byte Ptr classname$,Byte Ptr windowTitle$,WS_CAPTION | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU | WS_VISIBLE,100,100,400,350,0,0,GetModuleHandleA(0),lpParamADDR )


Global  btnOk = CreateWindowExA( 0 ,Byte Ptr "BUTTON",Byte Ptr "Ok",WS_CHILD | WS_VISIBLE,250,250,100,20,window ,0,GetModuleHandleA(0),lpParamADDR)
Global  btnCancel = CreateWindowExA( 0 ,Byte Ptr "BUTTON",Byte Ptr "Cancel",WS_CHILD | WS_VISIBLE,250,250+24,100,20,window ,0,GetModuleHandleA(0),lpParamADDR)
Global  lblHeadline = CreateWindowExA( 0 ,Byte Ptr "STATIC",Byte Ptr "I am the label, I am spanning the top",WS_CHILD | WS_VISIBLE,10,10,300,20,window ,0,GetModuleHandleA(0),lpParamADDR)


Const WS_BORDER = $800000
Const  WS_THICKFRAME     = $40000
Const  WS_DLGFRAME        = $400000

Global  box  = CreateWindowExA( 0 ,Byte Ptr "EDIT",Byte Ptr "Only numbers here!",WS_CHILD | WS_VISIBLE | WS_BORDER | ES_NUMBER,10,10+40,300,20,window ,0,GetModuleHandleA(0),lpParamADDR)
Global  box2  = CreateWindowExA( 0 ,Byte Ptr "EDIT",Byte Ptr "I am box, I am",WS_CHILD | WS_VISIBLE | WS_BORDER ,10,10+40+40,300,20,window ,0,GetModuleHandleA(0),lpParamADDR)


'Global  myfont =  CreateFontA(-16,12,0,0 ,400, 0,0 , 0,0, 4 , 0,0, 0, Byte Ptr "Arial"  + Chr(0) ) 


Global  myfont  = GetStockObject(12) 'ANSI_VAR_FONT

SendMessage lblHeadline ,WM_SETFONT,myfont  ,1
SendMessage btnOk ,WM_SETFONT,myfont  ,1
SendMessage btnCancel ,WM_SETFONT,myfont  ,1
SendMessage box ,WM_SETFONT,myfont  ,1
SendMessage box2 ,WM_SETFONT,myfont  ,1


Global textBank:TBank = CreateBank(300)
Global thetext:String


Const GWL_WNDPROC    = -4

Global  backcolor

backcolor = GetSysColor(COLOR_BTNFACE )

Local r = backcolor & $FF
Local g =  (backcolor & $FF00) Shr 8
Local b = (backcolor & $FF0000) Shr  16 


SetClsColor r,g,b
Cls


Cls

DebugLog backcolor 

Global textbuffer$


Global oldproc= SetWindowLongPtr (window , GWL_WNDPROC,  WinProc)  
'DebugLog "GetLastError() " + GetLastError()


Print "oldproc " + oldproc


While Not KeyHit(key_escape)
'Repeat

	SetColor Rnd(255) , Rnd(255) ,Rnd(255)

	DrawLine Rand(1000),Rand(1000),Rand(1000),Rand(1000)

	Flip

Wend


DebugLog "here it ends"
End



'
Function WinProc:Int(hWnd:Int,Msg:Int,wParam:Int,lParam:Int)
	
	
	Select Msg

		Case WM_CLOSE
		
		Case WM_DESTROY
				Print  "old proc restored"	
			SetWindowLong(hwnd,GWL_WNDPROC, oldproc) 
		

		Case WM_KEYDOWN
		
			'DebugLog "Keydown " + wParam + " " + lParam
			
			DebugLog "you pressed " + Chr$(wParam)
			
			
			Select wParam
				Case 27 ' ESC
				
				'	SendMessage hWnd,WM_CLOSE,0,0
			End Select
			
		Case WM_CREATE
			DebugLog "WM_CREATE"	
	
		Case WM_INITDIALOG
		
			DebugLog "WM_INITDIALOG"	
		
		Case WM_COMMAND
			DebugLog "command " + lParam
		
		
			Select lParam
				Case  btnOk
					
					If HIWORD(wparam)= BN_CLICKED
					'	notify does Not work in non debug mode
					' well it works, but you can't click it					
					'
					'	Notify "You clicked Ok"
					EndIf
			
				Case btnCancel
					If HIWORD(wparam)= BN_CLICKED
					'	notify does Not work in non debug mode
					' well it works, but you can't click it					

					'	Notify "You clicked cancel"
					EndIf
				Case box  , box2
				
					If HIWORD(wparam)= EN_CHANGE 
				
						DebugLog "box " + lParam
									
						SendMessage lParam ,WM_GETTEXT,BankSize(textbank)-2,Int(BankBuf(textbank))

						thetext$ = String.FromCString(BankBuf(textbank))
										
						DebugLog thetext
						

						

						
					
					EndIf
					
			
			End Select
			
		Default
			'DebugLog Msg
		
			
	End Select
	
	If oldproc<>0 Then Return CallWindowProc(oldproc, hwnd, Msg, Wparam, Lparam)   
	
End Function


Function LOWORD(value)
	Return value And $FFFF
End Function

Function HIWORD(value)
	Return (value Shr 16)
End Function