Rev 557 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
* com_gebauz_PonPonChun_JNITest.cpp
*
* Created on: 18.04.2013
* Author: chiu
*/
#include <iostream>
#include <Windows.h>
#include <Windowsx.h>
#include <CommCtrl.h>
#include "com_gebauz_PonPonChun_JNITest.h"
using namespace std;
JNIEXPORT void JNICALL Java_com_gebauz_PonPonChun_JNITest_hello(JNIEnv *env, jobject jthis, jstring data)
{
jboolean iscopy;
const char *charData = env->GetStringUTFChars(data, &iscopy);
cout << "Hello " << charData << endl;
env->ReleaseStringUTFChars(data, charData);
}
WNDPROC wpOrigEditProc;
HWND hwnd;
#define WM_REGISTERTOUCH (WM_USER + 0x0001)
void HandleTouch(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
UINT cInputs = LOWORD(wParam);
PTOUCHINPUT pInputs = new TOUCHINPUT[cInputs];
if (NULL != pInputs)
{
if (GetTouchInputInfo((HTOUCHINPUT)lParam,
cInputs,
pInputs,
sizeof(TOUCHINPUT)))
{
// process pInputs
wchar_t text[200];
wsprintf(text, L"WM_TOUCH %d", cInputs);
::SetWindowText(hwnd, text);
if (!CloseTouchInputHandle((HTOUCHINPUT)lParam))
{
// error handling
}
}
else
{
// GetLastError() and error handling
}
delete [] pInputs;
}
else
{
// error handling, presumably out of memory
}
}
// Subclass procedure
LRESULT APIENTRY WindowSubClassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_REGISTERTOUCH:
{
if (!RegisterTouchWindow(hwnd, TWF_WANTPALM))
{
cout << "error registering touch window: " << GetLastError() << endl;
break;
}
cout << "Registered touch" << endl;
}
break;
case WM_TOUCH:
/*{
short xPos = GET_X_LPARAM(lParam);
short yPos = GET_Y_LPARAM(lParam);
wchar_t text[200];
wsprintf(text, L"HAHA %d, %d", xPos, yPos);
::SetWindowText(hwnd, text);
}*/
HandleTouch(hwnd, wParam, lParam);
//cout << "TOUCH" << endl;
break;
}
return CallWindowProc(wpOrigEditProc, hwnd, uMsg, wParam, lParam);
}
JNIEXPORT void JNICALL Java_com_gebauz_PonPonChun_JNITest_test(JNIEnv *env, jobject jthis, jlong jhwnd)
{
hwnd = (HWND)jhwnd;
wpOrigEditProc = (WNDPROC)::SetWindowLong(hwnd, GWL_WNDPROC, (LONG)WindowSubClassProc);
::SendMessage(hwnd, WM_REGISTERTOUCH, 0, 0);
/*BOOL result = ::SetWindowSubclass(hwnd, WindowSubClassProc2, 1, 0);
if (!result)
cout << "error subclassing" << endl;*/
//::SetWindowsHookEx(WH_CALLWNDPROC, &CallWndProc, NULL, ::GetCurrentThreadId());
/* jclass thisClass = env->GetObjectClass(jthis);
jclass cls = env->FindClass("com/gebauz/PonPonChun/JNITest$Feedback");
if (cls == NULL)
{
cout << "Class not found" << endl;
return;
}
cout << "After FindClass" << endl;
jmethodID midInit = env->GetMethodID(cls, "<init>", "(I)V");
if (NULL == midInit) return;
cout << "Before construction" << endl;
jobject newObj = env->NewObject(cls, midInit, 1337);
cout << "After construction" << endl;
jfieldID fidMessage = env->GetFieldID(cls, "test", "Ljava/lang/String;");
if (NULL == fidMessage) return;
env->SetObjectField(newObj, fidMessage, env->NewStringUTF("Hahahahahah"));
jfieldID fidY = env->GetFieldID(cls, "y", "F");
if (NULL == fidY) return;
env->SetFloatField(newObj, fidY, 13.37f);
cout << "After Get Field ID" << endl;
jmethodID midCallBack = env->GetMethodID(thisClass, "callBack", "(Lcom/gebauz/PonPonChun/JNITest$Feedback;)V");
if (NULL == midCallBack) return;
env->CallVoidMethod(jthis, midCallBack, newObj);
cout << "Calling Callback" << endl;
env->DeleteLocalRef(newObj);*/
}