wxMax + Blitz3D SDK

BlitzMax Modules Forums/Brucey's Modules/wxMax + Blitz3D SDK

I'm trying to get wxMax and the Blitz3D SDK to work together. It's all working pretty well, but I'm having trouble getting keyboard input from B3D.

This is my code:
Strict

Import wx.wxApp
Import wx.wxFrame
Import wx.wxPanel
Import wx.wxSystemSettings
Import wx.wxTimer

Import Blitz3D.Blitz3DSDK

Type MyApp Extends wxApp

	Field frame:MyFrame

	Method OnInit:Int()

		frame = MyFrame(New MyFrame.Create(,,"wxMax + Blitz3D", 100, 100, 640, 480, wxDEFAULT_FRAME_STYLE))

		SetTopWindow(frame)
		
		frame.CenterOnScreen()
		frame.show()
		
		Return True
	
	EndMethod

EndType

Type MyFrame Extends wxFrame

	Field panel:wxPanel
	Field light:Int, camera:Int, cube:Int
	
	Field Timer:wxTimer
	
	Field sys:wxSystemSettings = New wxSystemSettings
	
	Field rendertime:Int = MilliSecs()

	Method OnInit()
	
	Timer = New wxTimer.Create(Self)
	
		Local w:Int, h:Int
		
		GetClientSize(w, h)
		
		panel = New wxPanel.Create(Self, wxID_ANY, 0, 0, w, h)
		
		Local hWnd:Int = Int(panel.GetHandle())

		bbSetBlitz3DHWND(hWnd)
		bbSetBlitz3DEventCallback(Int Byte Ptr BBEventHandler)
		bbBeginBlitz3D 
		bbGraphics3D Sys.GetMetric(wxSYS_SCREEN_X), Sys.GetMetric(wxSYS_SCREEN_Y), 0, 2
		
		bbViewport 0, 0, w, h
		
		light = bbCreateLight()
		
		camera = bbCreateCamera()
		
		cube=bbCreateCube()
		
		bbPositionEntity(camera,0,0,-4)
		
		ConnectAny(wxEVT_TIMER, OnTick)
		
		Timer.Start(30)
		
		EnablePolledInput()
		
	EndMethod

	Function OnQuit(event:wxEvent)
		wxWindow(event.parent).Close(True)
	EndFunction
	
	Function BBEventHandler(hwnd,msg,wp,lp) "win32"
		bbSystemEmitOSEvent hwnd,msg,wp,lp,Null
		Return -1
	EndFunction
	
	Function OnTick(event:wxEvent)
		If (MilliSecs()-(MyFrame(event.parent).rendertime)<10) Return
		Local w:Int, h:Int
		MyFrame(event.parent).panel.GetSize(w, h)
		MyFrame(event.parent).DrawWorld(w, h)
		MyFrame(event.parent).rendertime=MilliSecs()
	EndFunction
	
	Method DrawWorld(w, h)
	
		bbViewport 0, 0, w, h
		bbCameraViewport camera, 0, 0, w, h
		
		bbTurnEntity(cube,1,2,3)
		bbRenderWorld
		bbText(10, 10, MouseX() + ", " + MouseY())
		
		bbFlip

	EndMethod
	
EndType

New MyApp.run()

Sorry if it's messy. I just threw it together for this post.

The mouse input works fine, and I can get the mouse coordinates, but I can't get any keyboard input, and MouseXSpeed(), and MouseYSpeed() don't seem to work.

I was told that changing the event handler to the following works in C++, and allows you to get keyboard input.
Function BBEventHandler(hwnd,msg,wp,lp) "win32"
    MSWWindowProc((WXUINT)msg, (WXWPARAM)wp, (WXLPARAM)lp);
     Return -1
End Function

I can't seem to work out how to get this working in BlitzMax. Does anyone have any ideas, or know of another way to get this all working?

Thanks!
Robbie.

Interesting! I can't test this, but you might want to try connecting up to wxKeyEvents - ie, use wxWidgets for your keyboard processing. See "Handling Keyboard Events" in the wxWidgets programming pdf "Cross-Platform GUI Programming
with wxWidgets".