Welcome to XDA

Search to go directly to your device's forum

Register an account

Unlock full posting privileges

Ask a question

No registration required
Post Reply

[REF] Multitouch on the HTC Leo [Updated, 2/12/09]

OP l3v5y

29th November 2009, 10:43 PM   |  #1  
l3v5y's Avatar
OP Retired Senior Moderator
Flag Bristol
Thanks Meter: 38
 
7,390 posts
Join Date:Joined: Sep 2007
Donate to Me
More
Firstly, this only works on the HTC Leo, and secondly, I can't be held responsible if your device catches fire or any other damages caused by using this...

This is probably easier for C++/Win32 devs to get to grips with and I don't know much .Net so I won't be porting this to .Net.

Registry settings
These register the window for multitouch messages

Under HKLM\Software\HTC\TouchGL\Pinch\WhiteList create a key with whatever you want. Within that, create a string called "ClassName" with the Class.

For example:
Code:
HKLM\Software\HTC\TouchGL\Pinch\WhiteList\MultiTouch
ClassName="MULTITOUCH"
That should be all you need... For debugging, I cheated and set my application to have the class HTCAlbumClass. Don't do that if you want it to work on a real device though!

Code
The actual multitouch part is pretty easy to handle.
Your window will get sent two messages, one for multitouch move/begin and one for multitouch end, they're standard C++/Win32 window messages.

Code:
#define WM_MT_BEGIN (WM_APP+16391) // begins multitouch, and is sent when either mouse position changes.
#define WM_MT_END (WM_APP+16392)   // ends multitouch
The messages are fairly similar to ones for other mouse events, except that instead of the LPARAM being the mouse co-ordinates, both the LPARAM and the WPARAM are.
Code:
POINT pt,pt2;
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
			
pt2.x=LOWORD(wParam);
pt2.y=HIWORD(wParam);
In the l3v5yMultiTouch.h file, I've added two functions
Code:
POINT ParamToPoint(WPARAM); 
POINT ParamToPoint(LPARAM);
These make converting between window messages and useful data slightly easier...

I've also created a class for MultiTouch that I'm looking to extend with gestures and some neat things. For now, download the source code and give it a play with.

My class also swaps the two points if one goes to the left of the other, so there are no issues with the two points swapping over when you really don't want it to...

Also note that I've now changed the license to GPL v3. If you want to do anything with the code let me know and I'll probably say "yes". This is more to make sure the people that have put work in to this get recognised than anything else.

All you have to do is handle those two points, and handle those two events.

There are two videos of this in action here and I'm working on a paint like application using it...

Attached is a demo application (make sure that HTCAlbum is shut before running it as it uses the HTCAlbum class) and source code.

If you find this useful, please link back to here, and mention my name! (and if you feel really generous, donate as well, but that's completely optional)
Attached Files
File Type: zip MultiTouch Demo.zip - [Click for QR Code] (8.1 KB, 577 views)
File Type: zip MultiTouch Demo2 SRC.zip - [Click for QR Code] (51.6 KB, 522 views)
File Type: zip MultiTouch Demo2.zip - [Click for QR Code] (12.2 KB, 431 views)
Last edited by l3v5y; 2nd December 2009 at 11:03 PM.
29th November 2009, 10:44 PM   |  #2  
l3v5y's Avatar
OP Retired Senior Moderator
Flag Bristol
Thanks Meter: 38
 
7,390 posts
Join Date:Joined: Sep 2007
Donate to Me
More
A more robust way (and the correct way) to get the values for the messages is:
Quote:
Originally Posted by MilaCzeque

This is not true. Message numbers are assigned dynamically and you missed first message.

Right approach is:

Code:
int HTC_Zoom_Begin;
int HTC_Zooming;
int HTC_Zoom_End;

void register_messages()
{
	HTC_Zoom_Begin = RegisterWindowMessage(TEXT("HTC_Zoom_Begin"));
	HTC_Zoom_End = RegisterWindowMessage(TEXT("HTC_Zoom_End"));
	HTC_Zooming = RegisterWindowMessage(TEXT("HTC_Zooming"));
}
Fact that your application works after SR is just coincidence. But nice try anyway.

Also note the first message...

I've also realised there are a few different "modes" will find them all, and build a library with a few gestures for things like rotate, pinch zoom, two finger scrolling etc.
Last edited by l3v5y; 30th November 2009 at 03:56 PM.
29th November 2009, 10:48 PM   |  #3  
Member
Thanks Meter: 1
 
87 posts
Join Date:Joined: Nov 2008
saw your tweet & entry @ WMPU, gonna try it now. A huge thanks for this, well done!

Edit: its working, not perfect but it works and thats a good achievement.
Last edited by tibursio; 29th November 2009 at 11:26 PM.
29th November 2009, 11:45 PM   |  #4  
l3v5y's Avatar
OP Retired Senior Moderator
Flag Bristol
Thanks Meter: 38
 
7,390 posts
Join Date:Joined: Sep 2007
Donate to Me
More
Quote:
Originally Posted by tibursio

saw your tweet & entry @ WMPU, gonna try it now. A huge thanks for this, well done!

Edit: its working, not perfect but it works and thats a good achievement.

What ain't perfect about it?

It might be HTCs fault, or it might be my fault...
30th November 2009, 12:05 AM   |  #5  
scilor's Avatar
Senior Member
Flag @scilor.com
Thanks Meter: 19
 
1,230 posts
Join Date:Joined: Jan 2008
Donate to Me
Mhh, I cannot get working Windows Messages in .Net
Last edited by scilor; 30th November 2009 at 12:09 AM.
30th November 2009, 12:16 AM   |  #6  
l3v5y's Avatar
OP Retired Senior Moderator
Flag Bristol
Thanks Meter: 38
 
7,390 posts
Join Date:Joined: Sep 2007
Donate to Me
More
Quote:
Originally Posted by scilor

Mhh, I cannot get working Windows Messages in .Net

Does http://social.msdn.microsoft.com/For...d-b47b6becf70d help?
30th November 2009, 04:25 AM   |  #7  
Arktronic's Avatar
Retired Recognized Developer
Thanks Meter: 55
 
810 posts
Join Date:Joined: Dec 2006
Donate to Me
Quote:
Originally Posted by l3v5y

Does http://social.msdn.microsoft.com/For...d-b47b6becf70d help?

That's for desktop .NET, not the same This, however, should help: http://msdn.microsoft.com/en-us/libr...agewindow.aspx
30th November 2009, 05:15 AM   |  #8  
the0ne's Avatar
Senior Member
Flag Melbourne
Thanks Meter: 52
 
843 posts
Join Date:Joined: Jan 2007
More
cant wait to see the use of multitouch in WM games...Thanks for your effort and releasing the code for others.

EDIT : Have sent you beer money...
Last edited by the0ne; 30th November 2009 at 07:19 AM.
30th November 2009, 07:22 AM   |  #9  
scilor's Avatar
Senior Member
Flag @scilor.com
Thanks Meter: 19
 
1,230 posts
Join Date:Joined: Jan 2008
Donate to Me
Quote:
Originally Posted by the0ne

cant wait to see the use of multitouch in WM games...Thanks for your effort and releasing the code for others.

EDIT : Have sent you beer money...

If I manage Multitouch, A Pong Clone will be there
30th November 2009, 07:51 AM   |  #10  
A_C's Avatar
Senior Member
Thanks Meter: 5
 
1,364 posts
Join Date:Joined: Jan 2007
l3v5y, thanks for the findings.

But does it mean that LEO has a dual-touch screen? not really a multi-touch?

How about the normal WM_MOUSE events? But even these exist, it means a tri-touch screen?

P.S. I'm still waiting impatiently for my damn carrier to have HD2 restock...

Post Reply Subscribe to Thread

Tags
hd2, multitouch
Previous Thread Next Thread
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes