Blitz Stealing Window Events

Archives Forums/Win32 Discussion/Blitz Stealing Window Events

Picklesworth(Posted 2005) [#1]
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.


GW(Posted 2005) [#2]
Maybe you can catch them in blitz and fire them off again. ;)


Picklesworth(Posted 2005) [#3]
Nah, too much thinking.
Good idea though.


Picklesworth(Posted 2005) [#4]
This problem apparently only happens when debug mode is off.
Any reasons why this would be?


edit: Woops! Double post.


Hotcakes(Posted 2005) [#5]
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 ;]


Difference(Posted 2005) [#6]
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.


Picklesworth(Posted 2005) [#7]
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!