Blitz Stealing Window Events

Miscellaneous Forums/Win32 Discussion/Blitz Stealing Window Events

Has anyone made a library to compensate for (I think) Blitz3d stealing mouse events that are sent to windows? This library would use Win32's window messages to get the various mouse events.
When I have a routine check for mousedown(2), for instance, Blitz recieves the message, but no other window connected to it can. (Thus, my GUI gadgets do nothing).

I was working on that very library, but I'm now taking a break and I can tell that there's still some work to be done, so I'm hoping that it is already done by someone else.

Maybe you can catch them in blitz and fire them off again. ;)

Nah, too much thinking.
Good idea though.

This problem apparently only happens when debug mode is off.
Any reasons why this would be?


edit: Woops! Double post.

I seem to recall putting a Delay in the Blitz3D program will -help- the situation... it won't solve it, but a delay of 10 (or better yet 100) mostly works well.

I used this method for a Blitz3D / BlitzPlus combo program... BlitzPlus seemed unresponsive but it was because it was given nothing to respond to ;]

This one sends commands form one window to another. I use it in Blitz+ to subclass an Htmlview in order to get the keystrokes. It shows one principle of getting events, before Blitz gets them.

// blitzpipe.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "Windows.h"

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    return TRUE;
}


#define BBDECL extern "C" _declspec(dllexport)
#define BBCALL _stdcall

WNDPROC gSourceProc;
WNDPROC gDestProc;
HWND gSrcWindow;
HWND gDestWindow;

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch(uMsg)
	{

		
		case WM_KEYDOWN:

			//MessageBox(0,"WM_KEYDOWN","her",MB_OK);
			SendMessage( gDestWindow, uMsg, wParam, lParam);
			return CallWindowProc(gSourceProc, hwnd, uMsg, wParam, lParam); 
		case WM_KEYUP:
			//MessageBox(0,"WM_KEYUP","her",MB_OK);
			//return CallWindowProc(gDestProc, hwnd, uMsg, wParam, lParam);
			SendMessage( gDestWindow, uMsg, wParam, lParam);
			return CallWindowProc(gSourceProc, hwnd, uMsg, wParam, lParam); 

		default:
		    return CallWindowProc(gSourceProc, hwnd, uMsg, wParam, lParam); 
	
	}

	return 0;
}


BBDECL int BBCALL InstallPipe(HWND src, HWND dest)
{
	gSrcWindow = src;
	gDestWindow = dest;
	//MessageBox(0,"InstallPipe","her",MB_OK);
	
	gSourceProc = (WNDPROC)SetWindowLong(gSrcWindow, GWL_WNDPROC, (LONG)WindowProc);
	gDestProc = (WNDPROC)GetWindowLong(gDestWindow, GWL_WNDPROC);
	
	return true;
}

BBDECL int BBCALL UnInstallPipe()
{

	if (gSourceProc != 0){
		SetWindowLong(gSrcWindow, GWL_WNDPROC, (LONG)gSourceProc);
		gSourceProc = 0 ;
	}
	
	return true;
}


This one is only good for one window and one instance of the dll, because of the globals. A better way can be to store your variables in the userdata section of the windows with GetWindowLong() and SetWindowlong()

There also used to be a nice example somewhere in these forums, of how to make windows controls work in Blitz3D by using a keyboard hook, alowing for native windows textboxes and menus.

Got it.
Are there any key words you can remember from that thread?


Edit:
I think this could be the thread you're thinking of:
http://www.blitzbasic.com/Community/posts.php?topic=30511
(Post by Peter)

Anyone want to compile that for me?


Edit Edit: I love to brag. This won't work for everyone, but it works for me - and actually is a good feature! I put my renderer and input recieving functions inside of If apiGetFocus()=visWin, so that it won't steal events from a window when it's not in focus (and, obviously, nobody wants something to happen when it's not in focus)
I am the KING of weird solutions!