Win Tablet Edition und WM_LBUTTONDOWN (Tap and Hold deaktivieren)
-
Diesmal komm ich mit einem ziemlich spezifischen Problem.
Ich weiss nicht wieviele von euch einen Tablet Pc haben oder Programme für solche Dinger schreiben, deswegen beschreib ich mal möglichst genau mein Problem, vielleicht hat ja jemand Ideen.
Also Ich hab ein reines C++/WinAPI Programm. und im Wesentlichen ist alles das ich möchte, das eine WM_LBUTTONDOWN (o.ä.) Message geschickt wenn der User mit dem Stift aufs Display tippt. Mit der Maus funktioniert das natürlich perfekt.
Das Problem ist, dass Win XPTE eine "Tap and Hold" (TAH) Funktionalität hat, die einigen vielleicht vom PocketPC bekannt ist.
Wenn man den Stift aufsetzt und an einer Stelle lässt, erscheint ein Kreis um den Cursor, der sich mit der Zeit füllt. Wenn er voll ist und man den Stift anhebt wird ein Rechtsklick statt einem Linksklick ausgeführt.
Wenn man einen Linksklick ausführen will, muss man den Stift vorher anheben oder aus einem gewissen Bereich herrausbewegen, erst dann wird eine Message geschickt.Auf dem Pocket PC wahr es scheinbar immer so das man die TAH Funktionalität selbst in sein Programm einbauen musste. Bei XPTE ist das Feature dagegen immer aktiviert.
Mein Programm macht ausgiebig Gebrauch von Drag&Drop artigen Mausaktionen innerhalb des Programms. Dafür ist das Tap and Hold Feature denkbar ungünstig, da der User beim "Anfassen" kein feedback erhält und es den Eindruck macht als ließe sich das Element nicht bewegen.
XPTE Bietet eine Möglichkeit das Betriebssystemweit zu deaktivieren, was das Problem zwar löst, allerdings alles andere als elegant ist.
Es gibt auch eine Möglichkeit über das Tablet SDK direkt Events abzufangen. Dummer weise Funktioniert das nur mit Managed C++ (das ist dann .net oder?) wenn ich das richtig verstanden hab. Auch sonst ist das ganze SDK sehr offensichtlich auf .net ausgelegt.
Da ich mich mit .net nicht auskenne Fehlt mir der Ansatz wo ich in der Hilfe suchen muss.
Eigentlich würde ich das Programm auch ungern vom Tablet SDK (und den zugehörigen DLLs falls es die gibt) und möglicher Weise sogar von .net abhängig machen, nur damit es sich auf einem Tablet genauso verhält wie auf einem normalen PC.
Ganz davon zu Schweigen, dass ich mich nicht wegen sowas extra in das .net Framework (das ich nicht besonders mag) einarbeiten will.Habt ihr vielleicht eine Idee wie man das Prob einfach Lösen kann?
-
Ich hab die Lösung gefunden. Mein einziges Problem war, dass ich nach "Tap and Hold" gesucht hab, so heisst das aber nur bei Pocket PCs, bei Tablets nennt Microsoft die Sache "Press and Hold".
Naja hier nochmal ein Codeschnipsel falls jemand anderes ein ähnliches Problem hat.ATOM atomId = 0; LPCTSTR tabletAtom = L"MicrosoftTabletPenServiceProperty"; atomId = GlobalAddAtom(tabletAtom); if(atomId != 0) { SetProp(hwnd, tabletAtom, (HANDLE)1); }Alternativ nachzulesen auf msdn.com