B3DSDK mouse input using C#.Archives Forums/Blitz3D SDK Tutorials/B3DSDK mouse input using C#.
| I have had some trouble trying to get mouse input using C# and the SDK when rendering to a panel or picture-box etc. I have seen some posts which suggest placing another panel over the render target and wiring up events to this, I thought this was a little bit hacky, good idea but hacky. So I decided to try and find another way.|
The method I chose to go with is the SetBlitz3DEventCallback callback, it is pretty simple to setup and it doesn't have the nice layout of events in C# but it works.
Callback function declaration:
public delegate int dBBEventHandler(int hWnd, int Msg, int wParam, int lParam);
private dBBEventHandler BBEventHandler; ')
This declares a function pointer which we will hook up to recieve events from the SDK.
Hook-up the callback procedure (This must be done before calling bb.BeginBlitz3D.):
format_code('BBEventHandler = new dBBEventHandler(Engine_BBEventHandler);
The event handler body:
format_code('public int Engine_BBEventHandler(int hWnd, int Msg, int wParam, int lParam)
// process the event
// left mouse button is down
MessageBox.Show("Left mouse down");
// right mouse button is down
MessageBox.Show("Right mouse down");
Here is some constants that are used to determine what message is being fired, to get a complete list just look into the Win32 API.
// Windows messages
const int WM_LBUTTONDOWN = 0x201;
const int WM_LBUTTONUP = 0x202;
const int WM_LBUTTONDBLCLK = 0x203;
const int WM_RBUTTONDOWN = 0x204;
const int WM_RBUTTONUP = 0x205;
const int WM_RBUTTONDBLCLK = 0x206;
const int WM_MBUTTONDOWN = 0x207;
const int WM_MBUTTONUP = 0x208;
const int WM_MBUTTONDBLCLK = 0x209;')
This is pretty basic stuff but I thought it might come in handy to anybody who is not familiar with callbacks or C#.
| Awesome, this was a problem I was getting.|
I guess it is the same for Keyhit?
| There is a bug in the SDK whereby, if you call SetBlitz3DHWND and assign a control to render in, the callback doesn't fire events for keyboard input. But, if you don't call the above function you get keyboard input.|
A real pain in the ....