Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Hardwaretasten eines Pocket PC abfragen mit embedded C++ 4.0

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
30.06.2005, 14:22 Uhr
~kox
Gast


Hi,

erstmal: ich bin noch Neuling, nur als Warnung!
Also, ich schreibe ein Programm, in dem ich die Hardwaretasten eines Pocket PC abfragen will.
Dafür habe ich ursprünglich eine Membermethode von CWnd OnKeyUp gefunden, die genau dafür geeignet ist. Leider ist die aber protected, sodass ich nicht rankomme, ich habe "nur" einen CWnd-Handle auf das Fenster.
Also muß ich wohl eine Klasse erzeugen und das Fenster da irgendwie reinkriegen.
Aber es scheitert schon bei der Vererbung, ich habe "class key : public CWnd",
und der Compiler sagt, "base class undefined".
Ich habe aber nen ganzen Blumenstrauss included:

#include "key.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "winsock.h"
#include "jawt_md.h"
#include "assert.h"
#include "afx.h"

Was ist das Problem, hat jemand einen Tipp? Danke, falls ja!

Christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.06.2005, 15:18 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


afx.h zuerst inkludieren
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.06.2005, 15:24 Uhr
~kox
Gast


Hab ich gemacht, Meldung bleibt.

Christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.06.2005, 18:09 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


und wenn du einfach GetKeyState benutzt? müsste es doch auch unter CE geben?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
01.07.2005, 09:30 Uhr
~kox
Gast


Naja, ich kenne ja die Tasten nicht, also ich weiß nicht, unter welchem Namen sie laufen. Ich habe ja ein Testprogramm, da funktioniert das mit dem OnKeyUp komischerweise...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
01.07.2005, 09:55 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


dann musste schon etwas mehr Quellcode zeigen, was du hast (also dein Grundgerüst?!?), die abgeleitete CWnd klasse brauch ich nicht nur das wovon du das CWnd-Handle da bekommst
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
01.07.2005, 09:57 Uhr
~kox
Gast


Also das ganze ist ne dll, die von Java benutzt wird, ich muß die Tastensache aber native machen, weil das unter Java nicht geht. Und so krieg ich den Handle:


C++:
    CWinThread* test;

    jboolean isCopy;

    const char* ct = env->GetStringUTFChars(strTitle, &isCopy);
    CString cstr = CString(ct);
    
    HWND hwnd = FindWindow(NULL, (LPCTSTR)cstr);
    CWnd cwnd;

    if (hwnd == NULL) { return 0; }

    cwnd.Attach (hwnd);




Ich übergebe den Namen des Fensters, kriege nen HWND-Handle und mache den zu nem CWnd-Handle.
Meintest du das?

Dieser Post wurde am 01.07.2005 um 09:59 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
01.07.2005, 10:02 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


das lässt sich kompilieren? dann sollte CWnd bekannt sein

Welche Header sind dort in dieser Datei inkludiert?

Am besten legst du nun ein Klasse an:


C++:
#include "afxwin.h" // <-- für CWnd

class CMyWnd : public CWnd
{
  // usw
  ... OnKeyUp(...);
};



und dann


C++:
#include "MyWnd.h"
// ...

HWND hwnd = FindWindow(NULL, (LPCTSTR)cstr);

if (hwnd == NULL) { return 0; }

CMyWnd cwnd;
cwnd.Attach (hwnd);

// ...



dann sollten die Tasten-Nachrichten in deiner Fensterfunktion landen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
01.07.2005, 10:43 Uhr
~kox
Gast


Danke erstmal, bin ein Stück weiter
Die Klasse ist erstellt:


C++:
class MyCWnd : public CWnd
{
public:
    static void OnKeyUp (UINT nChar, UINT nRepCnt,UINT nFlags);
};



und im Code mache ich folgendes:


C++:
MyCWnd cwnd;

    if (hwnd == NULL) { return 0; }

    cwnd.Attach (hwnd);



Das klappt alles wunderbar. Nun ist die Sache, daß ich einen Thread mache, der dann das eigentliche Keyhorchen macht, das mache ich so:


C++:
CWinThread* test;

    test = AfxBeginThread(
        KeyListener,
        cwnd,
        THREAD_PRIORITY_NORMAL,
        0,
        0,
        NULL);



und die Thread-Funktion sieht dann so aus:


C++:
static UINT KeyListener(LPVOID Pparam) {

    //CString* test = (CString*) Pparam;

    MyCWnd *cwnd = (MyCWnd*) Pparam;

    UINT nChar;
    UINT nRepCnt;
    UINT nFlags;

    cwnd->OnKeyUp(nChar,nRepCnt,nFlags) {

    //mach diesunddas

    }

    return 0;

}    



Aber jetzt sagt er bei dem Aufruf: cwnd->OnKeyUp(nChar,nRepCnt,nFlags) { ... }

error C2143: syntax error : missing ';' before '{'

Irgendwas ist also noch nicht ganz richtig, aber ich sehe es nicht, du?

Christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
01.07.2005, 11:02 Uhr
Tommix



Hallo,
naja ein Funktionsaufruf sähe so aus:

C++:
cwnd->OnKeyUp(nChar,nRepCnt,nFlags);


Dies und das machen, sollte dann die Funktion.
Aber warum machst Du eine überladene virtuelle Funktion in der abgeleiteten Klasse auf einmal static?

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: