Subversion Repositories AndroidProjects

Rev

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);*/

}